//------------------------------------------------------------------------------------
//CONSTANTES
//------------------------------------------------------------------------------------
var prefijoControl = "ctl0_cphContent_";
var WIDTH_MENSAJE_RESPUESTA = "50%";
var HEIGHT_MENSAJE_RESPUESTA = 15;
var ESTADO_FLUJO_PENDIENTE = 1;
var ESTADO_FLUJO_RECHAZADO = 2;
var ESTADO_FLUJO_CANCELADO = 3;
var ESTADO_FLUJO_APROBADO = 4;
var PERMISO_PASO_DEVOLVER = "1";
var PERMISO_PASO_RECHAZAR = "2";
var PERMISO_PASO_CANCELAR = "3";
var PERMISO_PASO_NOTIFICAR_POR_EMAIL = "6";

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario de busqueda
//Por        : VSR, 11/11/2011
function validarFormularioBusqueda(){
  validationEngineClearCountCustomError();
  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario de busqueda
//Por        : VSR, 04/05/2012
function validarFormularioBusquedaEmpresa(){
  validationEngineClearCountCustomError();
  var txtFiltroRut = document.getElementById(prefijoControl + "txtFiltroRut");

  //valida RUT
  if(!IsValid_Empty(txtFiltroRut)){
    if(!IsValid_Rut(txtFiltroRut)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFiltroRut", "* Rut no v&aacute;lido");
    }
    else{
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroRut");
    }
  }
  else{
    jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroRut");
  }

  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario de busqueda
//Por        : VSR, 24/11/2011
function validarFormularioBusquedaPlantilla(){
  validationEngineClearCountCustomError();
  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario de busqueda
//Por        : VSR, 27/11/2011
function validarFormularioBusquedaWorkflow(){
  validationEngineClearCountCustomError();
  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario detalle
//Por        : VSR, 11/11/2011
function validarFormularioEmpresa(){
  validationEngineClearCountCustomError();
  var txtRut = document.getElementById("txtRut");
  var txtExisteRut = document.getElementById("txtExisteRut");
  var txtRazonSocial = document.getElementById("txtRazonSocial");
  var txtExisteRazonSocial = document.getElementById("txtExisteRazonSocial");
  var txtNombre = document.getElementById("txtNombre");
  var txtExisteNombre = document.getElementById("txtExisteNombre");
  var txtUrl = document.getElementById("txtUrl");
  var txtExisteUrl = document.getElementById("txtExisteUrl");
  var txtFechaInicio = document.getElementById("txtFechaInicio");
  var txtFechaTermino = document.getElementById("txtFechaTermino");
  var fuImagen = document.getElementById("fuImagen");

  //valida RUT
  if(IsValid_Empty(txtRut)){
    jQuery.validationEngine.addPromptError("txtRut", "* Este campo es requerido");
  }
  else{
    if(!IsValid_Rut(txtRut)){
      jQuery.validationEngine.addPromptError("txtRut", "* Rut no v&aacute;lido");
    }
    else if(txtExisteRut.value=="1"){
      jQuery.validationEngine.addPromptError("txtRut", "* No disponible, ya existe");
    }
    else{
      jQuery.validationEngine.removePrompt("txtRut");
    }
  }

  //valida RAZON SOCIAL
  if(IsValid_Empty(txtRazonSocial)){
    jQuery.validationEngine.addPromptError("txtRazonSocial", "* Este campo es requerido");
  }
  else{
    if(!IsValid_CaracteresPermitidos(txtRazonSocial)){
      jQuery.validationEngine.addPromptError("txtRazonSocial", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
    }
    else if(txtExisteRazonSocial.value=="1"){
      jQuery.validationEngine.addPromptError("txtRazonSocial", "* No disponible, ya existe");
    }
    else{
      jQuery.validationEngine.removePrompt("txtRazonSocial");
    }
  }

  //valida NOMBRE
  if(IsValid_Empty(txtNombre)){
    jQuery.validationEngine.addPromptError("txtNombre", "* Este campo es requerido");
  }
  else{
    if(!IsValid_CaracteresPermitidos(txtNombre)){
      jQuery.validationEngine.addPromptError("txtNombre", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
    }
    else if(txtExisteNombre.value=="1"){
      jQuery.validationEngine.addPromptError("txtNombre", "* No disponible, ya existe");
    }
    else{
      jQuery.validationEngine.removePrompt("txtNombre");
    }
  }

  //valida URL
  if(!IsValid_Empty(txtUrl)){
    if(!IsValid_CaracteresPermitidos(txtUrl)){
      jQuery.validationEngine.addPromptError("txtUrl", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
    }
    else if(txtExisteUrl.value=="1"){
      jQuery.validationEngine.addPromptError("txtUrl", "* No disponible, ya existe");
    }
    else{
      jQuery.validationEngine.removePrompt("txtUrl");
    }
  }
  else{
    jQuery.validationEngine.removePrompt("txtUrl");
  }

  //valida FECHA INICIO
  if(!IsValid_Empty(txtFechaInicio)){
    if(!IsValid_Date(txtFechaInicio)){
      jQuery.validationEngine.addPromptError("txtFechaInicio", "* Fecha inv&aacute;lida");
    }
    else {
      jQuery.validationEngine.removePrompt("txtFechaInicio");
    }
  } else {
    jQuery.validationEngine.removePrompt("txtFechaInicio");
  }

  //valida FECHA TERMINO
  if(!IsValid_Empty(txtFechaTermino)){
    if(!IsValid_Date(txtFechaTermino)){
      jQuery.validationEngine.addPromptError("txtFechaTermino", "* Fecha inv&aacute;lida");
    }
    else {
      jQuery.validationEngine.removePrompt("txtFechaTermino");
    }
  } else {
    jQuery.validationEngine.removePrompt("txtFechaTermino");
  }

  //valida que la fecha de termino no sea menor que la de inicio
  if(!IsValid_Empty(txtFechaInicio) && !IsValid_Empty(txtFechaTermino) && IsValid_Date(txtFechaInicio) && IsValid_Date(txtFechaTermino)){
    //construye objetos fechas para compararlos
    var newFechaInicio  = getDate(txtFechaInicio.value, "00:00");
    var newFechaTermino = getDate(txtFechaTermino.value, "00:00");

    //compara las fechas, si hay error muestra mensaje sino envia formulario
    if(newFechaInicio > newFechaTermino){
      jQuery.validationEngine.addPromptError("txtFechaInicio", "* No puede ser mayor que Fecha T&eacute;rmino");
    }
    else{
      jQuery.validationEngine.removePrompt("txtFechaInicio");
    }
  }

  //valida LOGO
  if(!IsValid_Empty(fuImagen)){
    if (!IsValid_FileImage(fuImagen)) {
      jQuery.validationEngine.addPromptError("fuImagen", "* El formato debe ser tipo imagen");
    } else {
      jQuery.validationEngine.removePrompt("fuImagen");
    }
  } else {
    jQuery.validationEngine.removePrompt("fuImagen");
  }

  var retorno = jQuery(NOMBRE_FORM_NORMAL_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario detalle
//Por        : VSR, 24/11/2011
function validarFormularioPlantilla(){
  validationEngineClearCountCustomError();
  var txtNombre = document.getElementById("txtNombre");
  var txtExisteNombre = document.getElementById("txtExisteNombre");
  var txtClasePagina = document.getElementById("txtClasePagina");
  var txtExisteClasePagina = document.getElementById("txtExisteClasePagina");

  //valida NOMBRE
  if(IsValid_Empty(txtNombre)){
    jQuery.validationEngine.addPromptError("txtNombre", "* Este campo es requerido");
  }
  else{
    if(!IsValid_CaracteresPermitidos(txtNombre)){
      jQuery.validationEngine.addPromptError("txtNombre", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
    }
    else if(txtExisteNombre.value=="1"){
      jQuery.validationEngine.addPromptError("txtNombre", "* No disponible, ya existe");
    }
    else{
      jQuery.validationEngine.removePrompt("txtNombre");
    }
  }

  //valida CLASE PAGINA
  if(IsValid_Empty(txtClasePagina)){
    jQuery.validationEngine.addPromptError("txtClasePagina", "* Este campo es requerido");
  }
  else{
    if(!IsValid_CaracteresPermitidos(txtClasePagina)){
      jQuery.validationEngine.addPromptError("txtClasePagina", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
    }
    else if(txtExisteClasePagina.value=="1"){
      jQuery.validationEngine.addPromptError("txtClasePagina", "* No disponible, ya existe");
    }
    else{
      jQuery.validationEngine.removePrompt("txtClasePagina");
    }
  }

  var retorno = jQuery(NOMBRE_FORM_NORMAL_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario detalle
//Por        : VSR, 27/11/2011
function validarFormularioWorkflow(){
  validationEngineClearCountCustomError();
  var ddlEmpresa = document.getElementById(prefijoControl + "ddlEmpresa_ddlCombo");
  var ddlPlantilla = document.getElementById(prefijoControl + "ddlPlantilla");
  var txtTotalPlazoAprobacion = document.getElementById(prefijoControl + "txtTotalPlazoAprobacion");
  var txtTotalPlazoAprobacionActual = document.getElementById(prefijoControl + "txtTotalPlazoAprobacionActual");
  var txtFechaInicio = document.getElementById(prefijoControl + "txtFechaInicio");
  var txtFechaTermino = document.getElementById(prefijoControl + "txtFechaTermino");

  //valida EMPRESA
  if(IsValid_ComboVacio(ddlEmpresa)){
    jQuery.validationEngine.addPromptError(prefijoControl + "ddlEmpresa_ddlCombo", "* Este campo es requerido");
  }
  else{
    jQuery.validationEngine.removePrompt(prefijoControl + "ddlEmpresa_ddlCombo");
  }

  //valida PLANTILLA
  if(IsValid_ComboVacio(ddlPlantilla)){
    jQuery.validationEngine.addPromptError(prefijoControl + "ddlPlantilla", "* Este campo es requerido");
  }
  else{
    jQuery.validationEngine.removePrompt(prefijoControl + "ddlPlantilla");
  }

  //valida FECHA INICIO
  if(txtFechaInicio){
    if(IsValid_Empty(txtFechaInicio)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFechaInicio", "* Este campo es requerido");
    } else {
      if(!IsValid_Date(txtFechaInicio)){
        jQuery.validationEngine.addPromptError(prefijoControl + "txtFechaInicio", "* Fecha inv&aacute;lida");
      }
      else {
        jQuery.validationEngine.removePrompt(prefijoControl + "txtFechaInicio");
      }
    }
  }

  //valida FECHA TERMINO
  if(txtFechaTermino){
    if(IsValid_Empty(txtFechaTermino)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFechaTermino", "* Este campo es requerido");
    } else {
      if(!IsValid_Date(txtFechaTermino)){
        jQuery.validationEngine.addPromptError(prefijoControl + "txtFechaTermino", "* Fecha inv&aacute;lida");
      }
      else {
        jQuery.validationEngine.removePrompt(prefijoControl + "txtFechaTermino");
      }
    }
  }

  //valida que la fecha de termino no sea menor que la de inicio
  if(txtFechaInicio && txtFechaTermino){
    if(!IsValid_Empty(txtFechaInicio) && !IsValid_Empty(txtFechaTermino) && IsValid_Date(txtFechaInicio) && IsValid_Date(txtFechaTermino)){
      //construye objetos fechas para compararlos
      var newFechaInicio  = getDate(txtFechaInicio.value, "00:00");
      var newFechaTermino = getDate(txtFechaTermino.value, "00:00");

      //compara las fechas, si hay error muestra mensaje sino envia formulario
      if(newFechaInicio > newFechaTermino){
        jQuery.validationEngine.addPromptError(prefijoControl + "txtFechaInicio", "* No puede ser mayor que Fecha T&eacute;rmino");
      }
      else{
        jQuery.validationEngine.removePrompt(prefijoControl + "txtFechaInicio");
      }
    }
  }

  //valida Total Plazo
  if(IsValid_Empty(txtTotalPlazoAprobacion)) {
    jQuery.validationEngine.addPromptError(prefijoControl + "txtTotalPlazoAprobacion", "* Este campo es requerido");
  } else {
    if(!IsValid_NumberInt(txtTotalPlazoAprobacion)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtTotalPlazoAprobacion", "* El valor no es v&aacute;lido");
    } else {
      if (parseInt(txtTotalPlazoAprobacion.value) < parseInt(txtTotalPlazoAprobacionActual.value)){
        jQuery.validationEngine.addPromptError(prefijoControl + "txtTotalPlazoAprobacion", "* El valor debe mayor al total del plazo");
      } else {
        jQuery.validationEngine.removePrompt(prefijoControl + "txtTotalPlazoAprobacion");
      }
    }
  }

  //valida controles del proveedor
  GEN_MostrarMensajesError(validarPasosWorkflow());

  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario detalle
//Por        : VSR, 10/05/2012
function validarFormularioWorkflowMinimo(){
  validationEngineClearCountCustomError();
  var ddlPlantilla = document.getElementById("ddlPlantilla_ddlCombo");
  var txtFechaInicio = document.getElementById("txtFechaInicio");
  var txtFechaTermino = document.getElementById("txtFechaTermino");

  //valida PLANTILLA
  if(ddlPlantilla.length > 1){
    if(IsValid_ComboVacio(ddlPlantilla)){
      jQuery.validationEngine.addPromptError("ddlPlantilla_ddlCombo", "* Este campo es requerido");
    }
    else{
      jQuery.validationEngine.removePrompt("ddlPlantilla_ddlCombo");
    }
  }

  //valida FECHA INICIO
  if(txtFechaInicio){
    if(IsValid_Empty(txtFechaInicio)){
      jQuery.validationEngine.addPromptError("txtFechaInicio", "* Este campo es requerido");
    } else {
      if(!IsValid_Date(txtFechaInicio)){
        jQuery.validationEngine.addPromptError("txtFechaInicio", "* Fecha inv&aacute;lida");
      }
      else {
        jQuery.validationEngine.removePrompt("txtFechaInicio");
      }
    }
  }

  //valida FECHA TERMINO
  if(txtFechaTermino){
    if(IsValid_Empty(txtFechaTermino)){
      jQuery.validationEngine.addPromptError("txtFechaTermino", "* Este campo es requerido");
    } else {
      if(!IsValid_Date(txtFechaTermino)){
        jQuery.validationEngine.addPromptError("txtFechaTermino", "* Fecha inv&aacute;lida");
      }
      else {
        jQuery.validationEngine.removePrompt("txtFechaTermino");
      }
    }
  }

  //valida que la fecha de termino no sea menor que la de inicio
  if(txtFechaInicio && txtFechaTermino){
    if(!IsValid_Empty(txtFechaInicio) && !IsValid_Empty(txtFechaTermino) && IsValid_Date(txtFechaInicio) && IsValid_Date(txtFechaTermino)){
      //construye objetos fechas para compararlos
      var newFechaInicio  = getDate(txtFechaInicio.value, "00:00");
      var newFechaTermino = getDate(txtFechaTermino.value, "00:00");

      //compara las fechas, si hay error muestra mensaje sino envia formulario
      if(newFechaInicio > newFechaTermino){
        jQuery.validationEngine.addPromptError("txtFechaInicio", "* No puede ser mayor que Fecha T&eacute;rmino");
      }
      else{
        jQuery.validationEngine.removePrompt("txtFechaInicio");
      }
    }
  }

  var retorno = jQuery(NOMBRE_FORM_NORMAL_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario del paso del workflow
//Por        : VSR, 28/11/2011
function validarFormularioPaso(){
  var msgError = "";
  var lstPadre = document.getElementById(prefijoControl + "msAprobadores_lstPadre");
  var txtIdsHija = document.getElementById(prefijoControl + "msAprobadores_txtIdsHija");
  var txtNombrePaso = document.getElementById(prefijoControl + "txtNombrePaso");
  var txtValorPlazo = document.getElementById(prefijoControl + "txtValorPlazo");
  var ddlUnidadMedida = document.getElementById(prefijoControl + "ddlUnidadMedida_ddlCombo");
  var txtValorSemaforoAmarillo = document.getElementById(prefijoControl + "txtValorSemaforoAmarillo");
  var ddlUnidadMedidaSemaforoAmarillo = document.getElementById(prefijoControl + "ddlUnidadMedidaSemaforoAmarillo_ddlCombo");
  var txtIndiceFilaEditar = document.getElementById(prefijoControl + "txtIndiceFilaEditar");

  if(IsValid_Empty(txtIdsHija)){
    msgError += " - Debe seleccionar al menos 1 aprobador\n";
    formatearEstiloConError(lstPadre, "");
  } else {
    formatearEstiloNormal(lstPadre, "", false, false, "", "");
  }

  if(IsValid_Empty(txtNombrePaso)){
    msgError += " - Debe ingresar el Nombre del Paso\n";
    formatearEstiloConError(txtNombrePaso, "");
  } else {
    if (!IsValid_CaracteresPermitidos(txtNombrePaso)) {
      msgError += " - El Nombre del Paso contiene caracteres no permitidos: "+ CARACTERES_NO_VALIDOS_SIN_SEPARADOR +"\n";
      formatearEstiloConError(txtNombrePaso, "");
    } else {
      formatearEstiloNormal(txtNombrePaso, "", false, false, "", "");
    }
  }

  if(IsValid_Empty(txtValorPlazo)){
    msgError += " - Debe ingresar Plazo para aprobar\n";
    formatearEstiloConError(txtValorPlazo, "");
  } else {
    if (!IsValid_NumberInt(txtValorPlazo)) {
      msgError += " - El valor ingresado en Plazo para aprobar no es válido\n";
      formatearEstiloConError(txtValorPlazo, "");
    } else {
      if (parseInt(txtValorPlazo.value) <= 0) {
        msgError += " - El valor ingresado en Plazo para aprobar debe ser mayor que 0\n";
        formatearEstiloConError(txtValorPlazo, "");
      } else {
        formatearEstiloNormal(txtValorPlazo, "", false, false, "", "");
      }
    }
  }

  if(IsValid_ComboVacio(ddlUnidadMedida)){
    msgError += " - Debe seleccionar unidad de medida en Plazo para aprobar\n";
    formatearEstiloConError(ddlUnidadMedida, "");
  } else {
    formatearEstiloNormal(ddlUnidadMedida, "", false, false, "", "");
  }

  if(IsValid_Empty(txtValorSemaforoAmarillo)){
    msgError += " - Debe ingresar valor Semáforo amarillo\n";
    formatearEstiloConError(txtValorSemaforoAmarillo, "");
  } else {
    if (!IsValid_NumberInt(txtValorSemaforoAmarillo)) {
      msgError += " - El valor ingresado en Semáforo amarillo no es válido\n";
      formatearEstiloConError(txtValorSemaforoAmarillo, "");
    } else {
      if (parseInt(txtValorSemaforoAmarillo.value) <= 0) {
        msgError += " - El valor ingresado en Semáforo amarillo debe ser mayor que 0\n";
        formatearEstiloConError(txtValorSemaforoAmarillo, "");
      } else {
        formatearEstiloNormal(txtValorSemaforoAmarillo, "", false, false, "", "");
      }
    }
  }

  if(IsValid_ComboVacio(ddlUnidadMedidaSemaforoAmarillo)){
    msgError += " - Debe seleccionar unidad de medida en Semáforo amarillo\n";
    formatearEstiloConError(ddlUnidadMedidaSemaforoAmarillo, "");
  } else {
    formatearEstiloNormal(ddlUnidadMedidaSemaforoAmarillo, "", false, false, "", "");
  }

  if(!IsValid_Empty(txtValorPlazo) && !IsValid_ComboVacio(ddlUnidadMedida) && !IsValid_Empty(txtValorSemaforoAmarillo) && !IsValid_ComboVacio(ddlUnidadMedidaSemaforoAmarillo)) {
    msgError += validarPlazoSemaforoAmarillo(txtValorPlazo,ddlUnidadMedida,txtValorSemaforoAmarillo,ddlUnidadMedidaSemaforoAmarillo);
  }

  //si hay errores entonces muestra mensaje
  if(msgError != ""){
    alert("Se encontraron los siguientes errores:\n" + msgError);
  } else {
    if(IsValid_Empty(txtIndiceFilaEditar)){
      agregarPasoTabla();
    } else {
      actualizarPasoTabla(txtIndiceFilaEditar.value);
    }
    calcularPlazoTotalWorkflow({recalcular:true});
  }
  return false;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario
//Por        : VSR, 04/05/2012
function validarFormularioContactoEmpresa(){
  validationEngineClearCountCustomError();
  var txtRut = document.getElementById("txtRut");

  //valida RUT
  if(!IsValid_Empty(txtRut)){
    if(!IsValid_Rut(txtRut)){
      jQuery.validationEngine.addPromptError("txtRut", "* Rut no v&aacute;lido");
    }
    else{
      jQuery.validationEngine.removePrompt("txtRut");
    }
  }
  else{
    jQuery.validationEngine.removePrompt("txtRut");
  }

  var retorno = jQuery(NOMBRE_FORM_NORMAL_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida que el plazo del semaforo corresponda al del plazo por aprobar
//Por        : VSR, 28/11/2011
function validarPlazoSemaforoAmarillo(txtValorPlazo,ddlUnidadMedida,txtValorSemaforoAmarillo,ddlUnidadMedidaSemaforoAmarillo) {
  var msgError = "";
  var valorPlazo = parseInt(txtValorPlazo.value);
  var unidadMedida = ddlUnidadMedida.value;
  var valorSemaforoAmarillo = parseInt(txtValorSemaforoAmarillo.value);
  var unidadMedidaSemaforoAmarillo = ddlUnidadMedidaSemaforoAmarillo.value;

  //transformacion en minutos Plazo por Aprobar
  valorPlazo = transformarPlazoMinutos(valorPlazo, unidadMedida);
  //transformacion en minutos Semaforo Amarillo
  valorSemaforoAmarillo = transformarPlazoMinutos(valorSemaforoAmarillo, unidadMedidaSemaforoAmarillo);

  //valida que el tiempo del semaforo sea menor al plazo por aprobar
  if (valorSemaforoAmarillo >= valorPlazo ) {
    msgError += " - El valor definido en Semáfono amarillo debe ser menor que el Plazo por aprobar\n";
    formatearEstiloConError(txtValorSemaforoAmarillo, "");
    formatearEstiloConError(ddlUnidadMedidaSemaforoAmarillo, "");
  } else {
    if (valorSemaforoAmarillo > 0){
      formatearEstiloNormal(txtValorSemaforoAmarillo, "", false, false, "", "");
      formatearEstiloNormal(ddlUnidadMedidaSemaforoAmarillo, "", false, false, "", "");
    }
  }

  return msgError;
}


//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en la plantilla factura
//Por        : VSR, 05/12/2011
function validarFormularioFactura(){
  validationEngineClearCountCustomError();
  var txtNumero = document.getElementById(prefijoControl + "txtNumero");
  var txtExisteNumero = document.getElementById(prefijoControl + "txtExisteNumero");
  var fuImagen = document.getElementById(prefijoControl + "fuImagen");
  var txtReplicarDatos = document.getElementById(prefijoControl + "txtReplicarDatos");
  var txtIVA = document.getElementById(prefijoControl + "txtIVA");
  var chkExentoIVA = document.getElementById(prefijoControl + "chkExentoIVA");
  var txtFechaEmision = document.getElementById(prefijoControl + "txtFechaEmision");
  var txtFechaVencimiento = document.getElementById(prefijoControl + "txtFechaVencimiento");

  //valida NUMERO
  if(IsValid_Empty(txtNumero)){
    jQuery.validationEngine.addPromptError(prefijoControl + "txtNumero", "* Este campo es requerido");
  }
  else{
    if(!IsValid_CaracteresPermitidos(txtNumero)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtNumero", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
    }
    else if(txtExisteNumero.value=="1"){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtNumero", "* No disponible, ya existe");
    }
    else{
      jQuery.validationEngine.removePrompt(prefijoControl + "txtNumero");
    }
  }

  //valida IMAGEN
  if(fuImagen){
    //si no esta replicando los datos, entonces pide este campo como obligatorio
    if(txtReplicarDatos.value == "0"){
      if(IsValid_Empty(fuImagen)){
        jQuery.validationEngine.addPromptError(prefijoControl + "fuImagen", "* Este campo es requerido");
      } else {
        if (!IsValid_FileImage(fuImagen)) {
          jQuery.validationEngine.addPromptError(prefijoControl + "fuImagen", "* El formato debe ser tipo imagen");
        } else {
          jQuery.validationEngine.removePrompt(prefijoControl + "fuImagen");
        }
      }
    } else {
      if(!IsValid_Empty(fuImagen)){
        if (!IsValid_FileImage(fuImagen)) {
          jQuery.validationEngine.addPromptError(prefijoControl + "fuImagen", "* El formato debe ser tipo imagen");
        } else {
          jQuery.validationEngine.removePrompt(prefijoControl + "fuImagen");
        }
      } else {
        jQuery.validationEngine.removePrompt(prefijoControl + "fuImagen");
      }

    }
  }

  //valida FECHA EMISION
  if(IsValid_Empty(txtFechaEmision)){
    jQuery.validationEngine.addPromptError(prefijoControl + "txtFechaEmision", "* Este campo es requerido");
  } else {
    if(!IsValid_Date(txtFechaEmision)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFechaEmision", "* Fecha inv&aacute;lida");
    }
    else {
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFechaEmision");
    }
  }

  //valida FECHA VENCIMIENTO
  if(IsValid_Empty(txtFechaVencimiento)){
    jQuery.validationEngine.addPromptError(prefijoControl + "txtFechaVencimiento", "* Este campo es requerido");
  }else {
    if(!IsValid_Date(txtFechaVencimiento)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFechaVencimiento", "* Fecha inv&aacute;lida");
    }
    else {
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFechaVencimiento");
    }
  }

  //valida que la fecha de vencimiento no sea menor que la de emision
  if(!IsValid_Empty(txtFechaEmision) && !IsValid_Empty(txtFechaVencimiento) && IsValid_Date(txtFechaEmision) && IsValid_Date(txtFechaVencimiento)){
    //construye objetos fechas para compararlos
    var newFechaEmision  = getDate(txtFechaEmision.value, "00:00");
    var newFechaVencimiento = getDate(txtFechaVencimiento.value, "00:00");

    //compara las fechas, si hay error muestra mensaje sino envia formulario
    if(newFechaEmision > newFechaVencimiento){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFechaEmision", "* No puede ser mayor que Fecha Vencimiento");
    }
    else{
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFechaEmision");
    }
  }

  //valida IVA
  if(!chkExentoIVA.checked){
    if(IsValid_Empty(txtIVA)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtIVA", "* Este campo es requerido");
    }
    else{
      if(!IsValid_Money(txtIVA)){
        jQuery.validationEngine.addPromptError(prefijoControl + "txtIVA", "* El valor no es v&aacute;lido");
      }
      else{
        if(txtIVA.value == "0"){
          jQuery.validationEngine.addPromptError(prefijoControl + "txtIVA", "* El valor debe ser mayor que cero");
        }
        else{
          jQuery.validationEngine.removePrompt(prefijoControl + "txtIVA");
        }
      }
    }
  } else {
    jQuery.validationEngine.removePrompt(prefijoControl + "txtIVA");
  }

  //valida controles del proveedor
  GEN_MostrarMensajesError(validarDatosProveedor());

  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en la plantilla orden factura
//Por        : VSR, 25/04/2012
function validarFormularioOrdenTrabajo(){
  validationEngineClearCountCustomError();
  var txtIdFlujo = document.getElementById(prefijoControl + "txtIdFlujo");
  var ddlDepartamento = document.getElementById(prefijoControl + "ddlDepartamento_ddlCombo");
  var ddlTipoOrden = document.getElementById(prefijoControl + "ddlTipoOrden_ddlCombo");
  var fuArchivo1 = document.getElementById(prefijoControl + "fuArchivo1");
  var txtNombreAsignado = document.getElementById(prefijoControl + "txtNombreAsignado");
  var txtPaternoAsignado = document.getElementById(prefijoControl + "txtPaternoAsignado");
  var txtMaternoAsignado = document.getElementById(prefijoControl + "txtMaternoAsignado");
  var txtFechaServicio = document.getElementById(prefijoControl + "txtFechaServicio");
  var ddlEstado = document.getElementById(prefijoControl + "ddlEstado_ddlCombo");
  var txtReplicarDatos = document.getElementById(prefijoControl + "txtReplicarDatos");

  //valida DEPARTAMENTO
  if(IsValid_ComboVacio(ddlDepartamento)){
    jQuery.validationEngine.addPromptError(prefijoControl + "ddlDepartamento_ddlCombo", "* Este campo es requerido");
  }
  else{
    jQuery.validationEngine.removePrompt(prefijoControl + "ddlDepartamento_ddlCombo");
  }

  //valida TIPO ORDEN
  if(IsValid_ComboVacio(ddlTipoOrden)){
    jQuery.validationEngine.addPromptError(prefijoControl + "ddlTipoOrden_ddlCombo", "* Este campo es requerido");
  }
  else{
    jQuery.validationEngine.removePrompt(prefijoControl + "ddlTipoOrden_ddlCombo");
  }

  //valida campos despues de creado el flujo
  if(txtIdFlujo.value != "0") {
    //valida ARCHIVO
    if(fuArchivo1){
      //si no esta replicando los datos, entonces pide este campo como obligatorio
      if(txtReplicarDatos.value == "0"){
        if(IsValid_Empty(fuArchivo1)){
          jQuery.validationEngine.addPromptError(prefijoControl + "fuArchivo1", "* Este campo es requerido");
        } else {
          jQuery.validationEngine.removePrompt(prefijoControl + "fuArchivo1");
        }
      }
    }

    //valida NOMBRE
    if(IsValid_Empty(txtNombreAsignado)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtNombreAsignado", "* Este campo es requerido");
    }
    else{
      if(!IsValid_CaracteresPermitidos(txtNombreAsignado)){
        jQuery.validationEngine.addPromptError(prefijoControl + "txtNombreAsignado", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
      }
      else{
        jQuery.validationEngine.removePrompt(prefijoControl + "txtNombreAsignado");
      }
    }

    //valida PATERNO
    if(IsValid_Empty(txtPaternoAsignado)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtPaternoAsignado", "* Este campo es requerido");
    }
    else{
      if(!IsValid_CaracteresPermitidos(txtPaternoAsignado)){
        jQuery.validationEngine.addPromptError(prefijoControl + "txtPaternoAsignado", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
      }
      else{
        jQuery.validationEngine.removePrompt(prefijoControl + "txtPaternoAsignado");
      }
    }

    //valida MATERNO
    if(!IsValid_Empty(txtMaternoAsignado)){
      if(!IsValid_CaracteresPermitidos(txtMaternoAsignado)){
        jQuery.validationEngine.addPromptError(prefijoControl + "txtMaternoAsignado", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
      }
      else{
        jQuery.validationEngine.removePrompt(prefijoControl + "txtMaternoAsignado");
      }
    }
    else{
      jQuery.validationEngine.removePrompt(prefijoControl + "txtMaternoAsignado");
    }

    //valida FECHA
    if(IsValid_Empty(txtFechaServicio)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFechaServicio", "* Este campo es requerido");
    }
    else{
      if(!IsValid_Date(txtFechaServicio)){
        jQuery.validationEngine.addPromptError(prefijoControl + "txtFechaServicio", "* La fecha no es v&aacute;lido");
      }
      else{
        jQuery.validationEngine.removePrompt(prefijoControl + "txtFechaServicio");
      }
    }

    //valida ESTADO
    if(IsValid_ComboVacio(ddlEstado)){
      jQuery.validationEngine.addPromptError(prefijoControl + "ddlEstado_ddlCombo", "* Este campo es requerido");
    }
    else{
      jQuery.validationEngine.removePrompt(prefijoControl + "ddlEstado_ddlCombo");
    }

  }

  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//------------------------------------------------------------------------------------------------------------------
//Descripcion : valida algunos datos del proveedor
//Por         : VSR, 01/05/2012
function validarDatosProveedor() {
  var msgError = "";
  var jsonMensajeError = "{\"control\":\"{$CONTROL}\",\"mensaje\":\"{$MENSAJE}\"}";
  var auxJSONMensajeError = "";
  var txtRutProveedor = document.getElementById(prefijoControl + "txtRutProveedor");
  var txtRazonSocial = document.getElementById(prefijoControl + "txtRazonSocial");
  var jsonError = comprobarDuplicidadProveedor();
  var controlValorDuplicado = "";

  if (jsonError != "") {
    var data = jQuery.parseJSON(jsonError);
    data = data[0];
    controlValorDuplicado = data.ControlValorDuplicado;
  }

  //valida Rut
  auxJSONMensajeError = jsonMensajeError;
  if(IsValid_Empty(txtRutProveedor)){
    auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtRutProveedor.id).replace("{$MENSAJE}", "* Este campo es requerido");
    msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
  } else {
    if (!IsValid_Rut(txtRutProveedor)) {
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtRutProveedor.id).replace("{$MENSAJE}", "* Rut no v&aacute;lido");
      msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
    } else {
      if (controlValorDuplicado == "Rut"){
        auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtRutProveedor.id).replace("{$MENSAJE}", "* No disponible, ya existe");
        msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
      } else {
        auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtRutProveedor.id).replace("{$MENSAJE}", "");
        msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
      }
    }
  }

  //valida Razon Social
  auxJSONMensajeError = jsonMensajeError;
  if(IsValid_Empty(txtRazonSocial)){
    auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtRazonSocial.id).replace("{$MENSAJE}", "* Este campo es requerido");
    msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
  } else {
    if(!IsValid_CaracteresPermitidos(txtRazonSocial)){
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtRazonSocial.id).replace("{$MENSAJE}", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
      msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
    }
    else{
      if (controlValorDuplicado == "RazonSocial"){
        auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtRazonSocial.id).replace("{$MENSAJE}", "* No disponible, ya existe");
        msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
      } else {
        auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtRazonSocial.id).replace("{$MENSAJE}", "");
        msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
      }
    }
  }

  return eval("["+ msgError +"]");
}


//------------------------------------------------------------------------------------------------------------------
//Descripcion : valida los datos de los pasos del workflow
//Por         : VSR, 30/05/2012
function validarPasosWorkflow() {
  var msgError = "";
  var jsonMensajeError = "{\"control\":\"{$CONTROL}\",\"mensaje\":\"{$MENSAJE}\"}";
  var auxJSONMensajeError = "";
  var txtTotalPasos = document.getElementById("txtTotalPasos");
  var tblPasos = document.getElementById("tblPasos");
  var listadoAprobadores = "";
  var totalPasosSinAprobador = 0;
  var msgSinAprobador = "";

  //valida que todos los pasos tengan al menos 1 aprobador
  jQuery("input[name='txtAprobadores[]']").each(function(){
    listadoAprobadores = jQuery(this).val();
    if(listadoAprobadores == "") {totalPasosSinAprobador++;}
  });

//valida Total Pasos
  auxJSONMensajeError = jsonMensajeError;
  if(txtTotalPasos.value == "0"){
    auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", tblPasos.id).replace("{$MENSAJE}", "* Debe crear al menos 1 paso");
    msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
  } else {
    if(totalPasosSinAprobador > 0){
      msgSinAprobador = (totalPasosSinAprobador == 1) ? "Hay 1 paso sin aprobadores" : "Hay "+ totalPasosSinAprobador +" pasos sin aprobadores";
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", tblPasos.id).replace("{$MENSAJE}", "* "+ msgSinAprobador);
      msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
    } else {
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", tblPasos.id).replace("{$MENSAJE}", "");
      msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
    }
  }

  return eval("["+ msgError +"]");

}


//------------------------------------------------------------------------------------
//Descripcion: abre formulario para ingresar o modificar una nueva empresa
//Por        : VSR, 11/11/2011
function abrirFormularioEmpresa(id){
  jQuery.fancybox({
    width: "100%",
    height: "100%",
    modal: true,
    type: "iframe",
    href: "index.php?page=Workflow.AdmFrmEmpresa&id=" + id
  });
}

//------------------------------------------------------------------------------------
//Descripcion: abre formulario para ingresar o modificar una nueva plantilla
//Por        : VSR, 24/11/2011
function abrirFormularioPlantilla(id){
  jQuery.fancybox({
    width: 600,
    height: 470,
    modal: true,
    type: "iframe",
    href: "index.php?page=Workflow.AdmFrmPlantilla&id=" + id
  });
}

//------------------------------------------------------------------------------------
//Descripcion: abre ventana para confirmar si quiere replicar los datos de un flujo
//Por        : VSR, 11/04/2012
function abrirPopUpReplicarDatos(estructuraJSON, pagina){
  jQuery.fancybox({
    width: 550,
    height: 210,
    modal: false,
    type: "iframe",
    href: "index.php?page=Workflow.ViewReplicarDatos&json=" + Url.encode(estructuraJSON) + "&pagina=" + Url.encode(pagina)
  });
}

//------------------------------------------------------------------------------------
//Descripcion: abre formulario para ingresar o modificar un nuevo workflow
//Por        : VSR, 27/11/2011
function abrirFormularioWorkflow(pagina, queryString){
  top.location.href = "index.php?page="+ pagina +"&a=" + queryString;
}

//------------------------------------------------------------------------------------
//Descripcion: abre formulario para ingresar o modificar un contacto
//Por        : VSR, 04/05/2012
function abrirFormularioContactoEmpresa(idEmpresa,indiceContacto){
  jQuery.fancybox({
    width: 650,
    height: 300,
    modal: true,
    type: "iframe",
    overlayColor: "#ddd",
    href: "index.php?page=Workflow.AdmFrmContactoEmpresa&idEmpresa="+ idEmpresa +"&indiceContacto="+ indiceContacto
  });
}

//------------------------------------------------------------------------------------
//Descripcion: abre formulario para ingresar o modificar un workflow con datos minimos
//Por        : VSR, 10/05/2012
function abrirFormularioWorkflowMinimo(idEmpresa,totalFlujos, indice){
  jQuery.fancybox({
    width: 630,
    height: 240,
    modal: true,
    type: "iframe",
    overlayColor: "#ddd",
    href: "index.php?page=Workflow.AdmFrmWorkflowMinimo&idEmpresa="+ idEmpresa +"&indice="+ indice +"&totalFlujos="+ totalFlujos
  });
}

//------------------------------------------------------------------------------------
//Descripcion: cierra el pop up y recarga el listado
//Por        : VSR, 11/11/2011
function cerrarPopUpEmpresa(id, valorCargarDesdePopUp, filtroTexto) {
  //al salir llama al metodo para cargar el listado
  if (valorCargarDesdePopUp == "1") {
    parent.cargarDesdePopUpEmpresa(valorCargarDesdePopUp, filtroTexto);
    parent.document.forms[0].submit();
  }
  parent.jQuery.fancybox.close();
}

//------------------------------------------------------------------------------------
//Descripcion: cierra el pop up y recarga el listado
//Por        : VSR, 24/11/2011
function cerrarPopUpPlantilla(id, valorCargarDesdePopUp, filtroTexto) {
  //al salir llama al metodo para cargar el listado
  if (valorCargarDesdePopUp == "1") {
    parent.cargarDesdePopUpPlantilla(valorCargarDesdePopUp, filtroTexto);
    parent.document.forms[0].submit();
  }
  parent.jQuery.fancybox.close();
}

//------------------------------------------------------------------------------------
//Descripcion: cierra el pop up y recarga el listado
//Por        : VSR, 04/05/2012
function cerrarPopUpContactoEmpresa(idEmpresa) {
  parent.dibujarTablaContactoEmpresa(idEmpresa);
  parent.jQuery.fancybox.close();
}

//------------------------------------------------------------------------------------
//Descripcion: cierra el pop up y recarga el listado
//Por        : VSR, 10/05/2012
function cerrarPopUpWorkflow(idEmpresa) {
  parent.dibujarTablaWorkflowEmpresa(idEmpresa);
  parent.jQuery.fancybox.close();
}

//------------------------------------------------------------------------------------
//Descripcion: cierra el pop up
//Por        : VSR, 21/05/2012
function cerrarPopUpListadoEmpresas() {
  parent.jQuery.fancybox.close();
}


//------------------------------------------------------------------------------------
//Descripcion: cierra el pop up y recarga el listado
//Por        : VSR, 11/11/2011
function cargarDesdePopUpEmpresa(valor, filtroTexto) {
  var txtCargaDesdePopUp = document.getElementById(prefijoControl + "txtCargaDesdePopUp");
  var txtFiltroRut = document.getElementById(prefijoControl + "txtFiltroRut");
  txtCargaDesdePopUp.value = valor;
  filtroTexto = Url.decode(filtroTexto);
  filtroTexto = filtroTexto.replace(/\+/g, " ");
  if (filtroTexto != "") txtFiltroRut.value = filtroTexto;

  var textoModal = generarTextoHtmlModal("Actualizando b&uacute;squeda, espere un momento por favor...");
  jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
}

//------------------------------------------------------------------------------------
//Descripcion: cierra el pop up y recarga el listado
//Por        : VSR, 11/11/2011
function cargarDesdePopUpPlantilla(valor, filtroTexto) {
  var txtCargaDesdePopUp = document.getElementById(prefijoControl + "txtCargaDesdePopUp");
  var txtFiltroNombre = document.getElementById(prefijoControl + "txtFiltroNombre");
  txtCargaDesdePopUp.value = valor;
  filtroTexto = Url.decode(filtroTexto);
  filtroTexto = filtroTexto.replace(/\+/g, " ");
  if (filtroTexto != "") txtFiltroNombre.value = filtroTexto;

  var textoModal = generarTextoHtmlModal("Actualizando b&uacute;squeda, espere un momento por favor...");
  jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
}

//----------------------------------------------------------------------------------------
//Descripcion : valida si se desea eliminar la empresa
//Por         : VSR, 11/11/2011
function validarEliminarEmpresa() {
  if (confirm("¿Está seguro de eliminar la empresa?")) {
    var textoModal = generarTextoHtmlModal("Eliminando registro, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
    return true;
  } else {
    return false;
  }
}

//----------------------------------------------------------------------------------------
//Descripcion : valida si se desea eliminar la plantilla
//Por         : VSR, 24/11/2011
function validarEliminarPlantilla() {
  if (confirm("¿Está seguro de eliminar la plantilla?")) {
    var textoModal = generarTextoHtmlModal("Eliminando registro, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
    return true;
  } else {
    return false;
  }
}

//----------------------------------------------------------------------------------------
//Descripcion : valida si se desea eliminar la factura
//Por         : VSR, 08/12/2011
function validarEliminarFactura() {
  if (confirm("¿Está seguro de eliminar la factura?")) {
    var textoModal = generarTextoHtmlModal("Eliminando registro, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
    return true;
  } else {
    return false;
  }
}

//----------------------------------------------------------------------------------------
//Descripcion : valida si se desea eliminar el workflow
//Por         : VSR, 07/01/2012
function validarEliminarWorkflow() {
  var txtTotalFlujos = document.getElementById(prefijoControl + "txtTotalFlujos");
  var totalFlujos = txtTotalFlujos.value;
  var msgEliminacion = "";

  if(totalFlujos != "0"){
    msgEliminacion = "Tiene "+ ((totalFlujos == "1") ? "1 flujo asociado." : totalFlujos + " flujos asociados.") + " ";
  }

  if (confirm(msgEliminacion + "Se eliminarán todas las referencias e historial\n¿Está seguro de eliminar el workflow?")) {
    var textoModal = generarTextoHtmlModal("Eliminando registro, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
    return true;
  } else {
    return false;
  }
}

//----------------------------------------------------------------------------------------
//Descripcion : valida si se desea eliminar el contacto
//Por         : VSR, 04/05/2012
function validarEliminarContactoEmpresa() {
  if (confirm("¿Está seguro de eliminar el contacto?")) {
    var textoModal = generarTextoHtmlModal("Eliminando registro, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
    return true;
  } else {
    return false;
  }
}

//----------------------------------------------------------------------------------------
//Descripcion : valida si se desea eliminar la orden de trabajo
//Por         : VSR, 08/05/2012
function validarEliminarOrdenTrabajo() {
  if (confirm("¿Está seguro de eliminar la orden de trabajo?")) {
    var textoModal = generarTextoHtmlModal("Eliminando registro, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
    return true;
  } else {
    return false;
  }
}

//----------------------------------------------------------------------------------------
//Descripcion : valida si se desea eliminar la solicitu de credito
//Por         : VSR, 08/05/2012
function validarEliminarSolicitudCredito() {
  if (confirm("¿Está seguro de eliminar la solicitud de crédito?")) {
    var textoModal = generarTextoHtmlModal("Eliminando registro, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
    return true;
  } else {
    return false;
  }
}

//-------------------------------------------------------------------------------------
//Descripcion : elimina una empresa
//Por         : VSR, 11/11/2011
function eliminarEmpresa(idEmpresa) {
  var txtCargaDesdePopUp = document.getElementById(prefijoControl + "txtCargaDesdePopUp");
  var queryString = "";

  try {
    //construye queryString
    queryString += "page=Workflow.HttpAjax";
    queryString += "&op=EliminarEmpresa";
    queryString += "&id=" + Url.encode(idEmpresa);

    if (confirm("¿Está seguro de eliminar el registro?")) {
      var textoModal = generarTextoHtmlModal("Eliminando empresa, espere un momento por favor...");
      jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});

      var okFunc = function(t) {
        var respuesta = jQuery.trim(t);
        if (contieneTextoTerminoSesion(respuesta)) {
          redireccionarLogin();
        }
        else if (respuesta == CONST_CODIGO_SQL_ERROR) {
          alert("Ha ocurrido un error interno y no se pudo eliminar el registro");
        }
        else {
          txtCargaDesdePopUp.value = "1";
          document.forms[0].submit();
        }
      }
      var errFunc = function(t) {
        alert("Ha ocurrido un error interno y no se pudo eliminar el registro");
      }
      jQuery.ajax({
        url: "index.php",
        type: "post",
        async: false,
        data: queryString,
        success: okFunc,
        error: errFunc
      });
    }
  }
  catch (e) {
    if (e.description) { //para IE
      alert("Exception:\n" + e.description)
    }
    else { // otro navegador
      alert("Exception:\n" + e)
    }
    return false;
  }
}

//-------------------------------------------------------------------------------------
//Descripcion : elimina una plantilla
//Por         : VSR, 24/11/2011
function eliminarPlantilla(idPlantilla) {
  var txtCargaDesdePopUp = document.getElementById(prefijoControl + "txtCargaDesdePopUp");
  var queryString = "";

  try {
    //construye queryString
    queryString += "page=Workflow.HttpAjax";
    queryString += "&op=EliminarPlantilla";
    queryString += "&id=" + Url.encode(idPlantilla);

    if (confirm("¿Está seguro de eliminar el registro?")) {
      var textoModal = generarTextoHtmlModal("Eliminando plantilla, espere un momento por favor...");
      jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});

      var okFunc = function(t) {
        var respuesta = jQuery.trim(t);
        if (contieneTextoTerminoSesion(respuesta)) {
          redireccionarLogin();
        }
        else if (respuesta == CONST_CODIGO_SQL_ERROR) {
          alert("Ha ocurrido un error interno y no se pudo eliminar el registro");
        }
        else {
          txtCargaDesdePopUp.value = "1";
          document.forms[0].submit();
        }
      }
      var errFunc = function(t) {
        alert("Ha ocurrido un error interno y no se pudo eliminar el registro");
      }
      jQuery.ajax({
        url: "index.php",
        type: "post",
        async: false,
        data: queryString,
        success: okFunc,
        error: errFunc
      });
    }
  }
  catch (e) {
    if (e.description) { //para IE
      alert("Exception:\n" + e.description)
    }
    else { // otro navegador
      alert("Exception:\n" + e)
    }
    return false;
  }
}

//-------------------------------------------------------------------------------------
//Descripcion : elimina un workflow
//Por         : VSR, 07/01/2012
function eliminarWorkflow(idWorkflow) {
  var txtCargaDesdePopUp = document.getElementById(prefijoControl + "txtCargaDesdePopUp");
  var queryString = "";

  try {
    //construye queryString
    queryString += "page=Workflow.HttpAjax";
    queryString += "&op=EliminarWorkflow";
    queryString += "&id=" + Url.encode(idWorkflow);

    if (confirm("Se eliminarán todas las referencias y el historial\n¿Está seguro de eliminar el registro?")) {
      var textoModal = generarTextoHtmlModal("Eliminando empresa, espere un momento por favor...");
      jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});

      var okFunc = function(t) {
        var respuesta = jQuery.trim(t);
        if (contieneTextoTerminoSesion(respuesta)) {
          redireccionarLogin();
        }
        else if (respuesta == CONST_CODIGO_SQL_ERROR) {
          alert("Ha ocurrido un error interno y no se pudo eliminar el registro");
        }
        else {
          txtCargaDesdePopUp.value = "1";
          document.forms[0].submit();
        }
      }
      var errFunc = function(t) {
        alert("Ha ocurrido un error interno y no se pudo eliminar el registro");
      }
      jQuery.ajax({
        url: "index.php",
        type: "post",
        async: false,
        data: queryString,
        success: okFunc,
        error: errFunc
      });
    }
  }
  catch (e) {
    if (e.description) { //para IE
      alert("Exception:\n" + e.description)
    }
    else { // otro navegador
      alert("Exception:\n" + e)
    }
    return false;
  }
}

//--------------------------------------------------------------------------------------------
//Descripcion : comprueba si el valor ya existe en base de datos
//Por         : VSR, 13/11/2011
function comprobarDuplicidadDatos(id, elTxtBox, elContenedorRespuestaTxt, elContenedorRespuestaDiv, opcion) {
  var txtObj = document.getElementById(elTxtBox);
  var txtContenedor = document.getElementById(elContenedorRespuestaTxt);
  var divContenedor = document.getElementById(elContenedorRespuestaDiv);
  var queryString = "";
  var themeBaseUrl = obtenerThemeBaseUrl();

  if(!IsValid_Empty(txtObj)) {
    //construye queryString
    queryString += "page=Workflow.HttpAjax";
    queryString += "&id="+ Url.encode(id);
    queryString += "&valor="+ Url.encode(txtObj.value);
    queryString += "&op="+ Url.encode(opcion);

    var okFunc = function(t) {
      var respuesta = jQuery.trim(t);
      if (respuesta == CONST_CODIGO_SQL_ERROR) {
        divContenedor.innerHTML = "&nbsp;<span class='ico16-error'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeError'>Ha ocurrido un error interno y no se pudo obtener el valor.</span>";
        txtContenedor.value = "0";
      }
      else {
        //si el valor esta duplicado entonces muestra mensaje de Ocupado
        if (respuesta == 1) {
          divContenedor.innerHTML = "&nbsp;<span class='ico16-error'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeError'>No disponible</span>";
        }
        else {
          divContenedor.innerHTML = "&nbsp;<span class='ico16-ticket'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeExito'>Disponible</span>";
        }
        txtContenedor.value = respuesta;
      }
    }
    var errFunc = function(t) {
      divContenedor.innerHTML = "&nbsp;<span class='ico16-error'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeError'>Ha ocurrido un error interno y no se pudo obtener el valor.</span>";
    }
    jQuery.ajax({
      url: "index.php",
      type: "post",
      async: false,
      data: queryString,
      success: okFunc,
      error: errFunc
    });
  } else {
    divContenedor.innerHTML = "";
    txtContenedor.value = "0";
  }

}

//--------------------------------------------------------------------------------------------
//Descripcion : lanza float para seleccionar WF
//Por         : JBC, 27/11/2011
function seleccioneWf(){
  jQuery.fancybox({
    type: "iframe",
    autoDimensions : true,
    width : 500,
    height : 200,
    href: "index.php?page=Workflow.ListSeleccioneWf"
  });
}

//--------------------------------------------------------------------------------------------
//Descripcion : carga datos relacionados con la empresa
//Por         : VSR, 27/11/2011
function cargarDatosRelacionadosEmpresa() {
  cargarComboPlantilla("-1", "Seleccione");
  cargarEncargados();
  cargarAprobadores();
}

//--------------------------------------------------------------------------------------------
//Descripcion : carga plantillas
//Por         : VSR, 27/11/2011
function cargarComboPlantilla(idPlanillaSelecionada, cabecera) {
  var ddlEmpresa = document.getElementById(prefijoControl + "ddlEmpresa_ddlCombo");
  var queryString = "";

  //construye queryString
  queryString += "page=Workflow.HttpAjax";
  queryString += "&op=ObtenerComboPlantillaJSON";
  queryString += "&idEmpresa="+ Url.encode(ddlEmpresa.value);
  queryString += "&idPlanillaSeleccionada="+ Url.encode(idPlanillaSelecionada);

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (respuesta == CONST_CODIGO_SQL_ERROR) {
      alert("Ha ocurrido un error interno y no se pudo obtener el combo de plantillas");
    }
    else {
      if(respuesta != "") {
        cargarOpcionesComboDesdeJSON(
          {
            nombreCombo : prefijoControl + "ddlPlantilla",
            cabeceraCombo : cabecera,
            json : respuesta
          }
        )
      }
    }
  }
  var errFunc = function(t) {
    alert("Ha ocurrido un error interno y no se pudo obtener el combo de plantillas");
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
}

//--------------------------------------------------------------------------------------------
//Descripcion : carga encargados
//Por         : VSR, 27/11/2011
function cargarEncargados() {
  var ddlEmpresa = document.getElementById(prefijoControl + "ddlEmpresa_ddlCombo");
  var lstHija = document.getElementById(prefijoControl + "msEncargados_lstHija");
  var queryString = "";

  //construye queryString
  queryString += "page=Workflow.HttpAjax";
  queryString += "&op=ObtenerUsuariosJSON";
  queryString += "&idEmpresa="+ Url.encode(ddlEmpresa.value);

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (respuesta == CONST_CODIGO_SQL_ERROR) {
      alert("Ha ocurrido un error interno y no se pudo obtener los encargados");
    }
    else {
      if(respuesta != "") {
        lstHija.innerHTML = "";
        cargarOpcionesComboDesdeJSON(
          {
            nombreCombo : prefijoControl + "msEncargados_lstPadre",
            cabeceraCombo : "",
            json : respuesta
          }
        )
      }
    }
  }
  var errFunc = function(t) {
    alert("Ha ocurrido un error interno y no se pudo obtener los encargados");
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
}

//--------------------------------------------------------------------------------------------
//Descripcion : carga aprobadores
//Por         : VSR, 27/11/2011
function cargarAprobadores() {
  var ddlEmpresa = document.getElementById(prefijoControl + "ddlEmpresa_ddlCombo");
  var lstHija = document.getElementById(prefijoControl + "msAprobadores_lstHija");
  var txtUsuariosJSON = document.getElementById("txtUsuariosJSON");
  var queryString = "";

  //construye queryString
  queryString += "page=Workflow.HttpAjax";
  queryString += "&op=ObtenerUsuariosJSON";
  queryString += "&idEmpresa="+ Url.encode(ddlEmpresa.value);

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (respuesta == CONST_CODIGO_SQL_ERROR) {
      alert("Ha ocurrido un error interno y no se pudo obtener los encargados");
    }
    else {
      if(respuesta != "") {
        lstHija.innerHTML = "";
        txtUsuariosJSON.value = respuesta;
        cargarOpcionesComboDesdeJSON(
          {
            nombreCombo : prefijoControl + "msAprobadores_lstPadre",
            cabeceraCombo : "",
            json : respuesta
          }
        )
      }
    }
  }
  var errFunc = function(t) {
    alert("Ha ocurrido un error interno y no se pudo obtener los encargados");
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
}

//--------------------------------------------------------------------------------------------
//Descripcion : carga los permisos del paso para configurar
//Por         : VSR, 30/11/2011
function cargarPermisosPaso() {
  var ddlEmpresa = document.getElementById(prefijoControl + "ddlEmpresa_ddlCombo");
  var txtPermisosPasoJSON = document.getElementById("txtPermisosPasoJSON");
  var queryString = "";

  //construye queryString
  queryString += "page=Workflow.HttpAjax";
  queryString += "&op=ObtenerPermisosPasoJSON";
  queryString += "&idEmpresa="+ Url.encode(ddlEmpresa.value);

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (respuesta == CONST_CODIGO_SQL_ERROR) {
      alert("Ha ocurrido un error interno y no se pudo obtener los permisos del paso");
    }
    else {
      if(respuesta != "") {
        txtPermisosPasoJSON.value = respuesta;
      }
    }
  }
  var errFunc = function(t) {
    alert("Ha ocurrido un error interno y no se pudo obtener los permisos del paso");
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
}

//--------------------------------------------------------------------------------------------
//Descripcion : agrega un fila a la tabla donde se definen los pasos
//Por         : VSR, 29/11/2011
function agregarPasoTabla(){
  var chkPuedeMoverPasos = document.getElementById(prefijoControl + "chkPuedeMoverPasos");
  var txtTotalPasos = document.getElementById("txtTotalPasos");
  var txtNombrePaso = document.getElementById(prefijoControl + "txtNombrePaso");
  var txtIdsHija = document.getElementById(prefijoControl + "msAprobadores_txtIdsHija");
  var txtValorPlazo = document.getElementById(prefijoControl + "txtValorPlazo");
  var ddlUnidadMedida = document.getElementById(prefijoControl + "ddlUnidadMedida_ddlCombo");
  var txtValorSemaforoAmarillo = document.getElementById(prefijoControl + "txtValorSemaforoAmarillo");
  var ddlUnidadMedidaSemaforoAmarillo = document.getElementById(prefijoControl + "ddlUnidadMedidaSemaforoAmarillo_ddlCombo");
  var txtPermisosPasoJSON = document.getElementById("txtPermisosPasoJSON");
  var themeBaseUrl = obtenerThemeBaseUrl();
  var htmlCheck = "";
  var classFila = (chkPuedeMoverPasos.checked) ? "cursorMove" : "cursorNoMove";

  //obtiene valores
  var indicePaso = parseInt(txtTotalPasos.value);
  indicePaso++;
  txtTotalPasos.value = indicePaso;
  var nombrePaso = txtNombrePaso.value;
  var listaAprobadores = "";
  var valorPlazo = txtValorPlazo.value;
  var valorUnidadMedida = ddlUnidadMedida.value;
  var nombreUnidadMedida = jQuery("#" + prefijoControl + "ddlUnidadMedida_ddlCombo option:selected").text();
  var valorSemaforoAmarillo = txtValorSemaforoAmarillo.value;
  var valorUnidadMedidaSemaforoAmarillo = ddlUnidadMedidaSemaforoAmarillo.value;
  var nombreUnidadMedidaSemaforoAmarillo = jQuery("#" + prefijoControl + "ddlUnidadMedidaSemaforoAmarillo_ddlCombo option:selected").text();
  var data = jQuery.parseJSON(txtPermisosPasoJSON.value);
  var indice = 0;
  var checked = "";

  //obtiene nombre de los aprobadores
  jQuery("#" + prefijoControl + "msAprobadores_lstHija option").each(function(){
    listaAprobadores += jQuery(this).text() + "<br/>";
  });

  //dibuja los permisos
  jQuery.each(data, function(){
      var texto = this.Texto;
      var valor = this.Valor;

      switch (valor) {
      case PERMISO_PASO_DEVOLVER:
      case PERMISO_PASO_RECHAZAR:
      case PERMISO_PASO_CANCELAR:
      case PERMISO_PASO_NOTIFICAR_POR_EMAIL:
        checked = "checked";
        break;
      default:
        checked = "";
        break;
      }

      indice++;
      htmlCheck +="<input type='checkbox' id='chkPermiso_"+ indicePaso +"_"+ indice+"' name='chkPermiso_"+ indicePaso +"[]' value='"+ valor +"' "+ checked +" />&nbsp;<label for='chkPermiso_"+ indicePaso +"_"+ indice+"'>"+ texto +"</label><br />";
  });

  var fila = "";
  fila += "<tr class='"+ classFila +"'>\n";
  fila += "  <td class='cssLabelPaso'>\n";
  fila += "    <input type='hidden' id='txtIndicePaso_"+ indicePaso +"' name='txtIndicePaso[]' value='"+ indicePaso.toString() +"' />\n";
  fila += "    <input type='hidden' id='txtIdPaso_"+ indicePaso +"' name='txtIdPaso[]' value='-1' />\n";
  fila += "    <input type='hidden' id='txtOrdenPaso_"+ indicePaso +"' name='txtOrdenPaso[]' value='' />\n";
  fila += "    <span id='lblPaso_"+ indicePaso +"'>"+ indicePaso +"</span>\n";
  fila += "  </td>\n";
  fila += "  <td><input type='hidden' id='txtNombrePaso_"+ indicePaso +"' name='txtNombrePaso[]' value='"+ Url.encode(nombrePaso) +"' /><span id='lblNombrePaso_"+ indicePaso +"'>"+ nombrePaso +"</span></td>\n";
  fila += "  <td><input type='hidden' id='txtAprobadores_"+ indicePaso +"' name='txtAprobadores[]' value='"+ Url.encode(txtIdsHija.value) +"' /><span id='lblAprobadores_"+ indicePaso +"'>"+ listaAprobadores +"</span></td>\n";
  fila += "  <td>\n";
  fila += "    <input type='hidden' id='txtValorPlazo_"+ indicePaso +"' name='txtValorPlazo[]' value='"+ Url.encode(valorPlazo) +"' />\n";
  fila += "    <input type='hidden' id='txtUnidadMedida_"+ indicePaso +"' name='txtUnidadMedida[]' value='"+ Url.encode(valorUnidadMedida) +"' /><span id='lblPlazo_"+ indicePaso +"'>"+ valorPlazo +"&nbsp;"+ nombreUnidadMedida +"</span>\n";
  fila += "  </td>\n";
  fila += "  <td>\n";
  fila += "    <input type='hidden' id='txtValorSemaforoAmarillo_"+ indicePaso +"' name='txtValorSemaforoAmarillo[]' value='"+ Url.encode(valorSemaforoAmarillo) +"' />\n";
  fila += "    <input type='hidden' id='txtUnidadMedidaSemaforoAmarillo_"+ indicePaso +"' name='txtUnidadMedidaSemaforoAmarillo[]' value='"+ Url.encode(valorUnidadMedidaSemaforoAmarillo) +"' /><span id='lblSemaforoAmarillo_"+ indicePaso +"'>A los: "+ valorSemaforoAmarillo +"&nbsp;"+ nombreUnidadMedidaSemaforoAmarillo +"</span>\n";
  fila += "  </td>\n";
  fila += "  <td>"+ htmlCheck +"</td>\n";
  fila += "  <td>\n";
  fila += "    <a href='javascript:;' onclick='editarFilaPaso("+ indicePaso +")'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico18-edit' alt='editar' title='editar' /></a>\n";
  fila += "    <a href='javascript:;' onclick='eliminarFilaPaso(this)'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico18-trush' alt='eliminar' title='eliminar' /></a>\n";
  fila += "  </td>\n";
  fila += "</tr>\n";
  //agrega la fila
  jQuery("#tblPasos").append(fila);
  asignarOrdenPaso({cambiarLabelOrdenPaso: false});
  limpiarControlesPaso();
}

//--------------------------------------------------------------------------------------------
//Descripcion : elimina una fila de la tabla
//Por         : VSR, 01/12/2011
function eliminarFilaPaso(obj){
  jQuery(obj).parent().parent("tr").remove();
  asignarOrdenPaso({cambiarLabelOrdenPaso: false});
  calcularPlazoTotalWorkflow({recalcular:true})
}

//--------------------------------------------------------------------------------------------
//Descripcion : asiga el orden de los pasos
//Por         : VSR, 01/12/2011
function asignarOrdenPaso(opciones){
  //obtiene nombre de los aprobadores
  var orden = 0;
  var idTxtOrdenPaso = "";
  var idLblPaso = "";
  jQuery("input[name='txtOrdenPaso[]']").each(function(){
    orden++;
    jQuery(this).val(orden);
    //asigna orden al label
    if (opciones.cambiarLabelOrdenPaso) {
      idTxtOrdenPaso = jQuery(this).attr("id");
      idLblPaso = idTxtOrdenPaso.replace("txtOrdenPaso_","lblPaso_");
      jQuery("#"+idLblPaso).html(orden);
    }
  });
}

//--------------------------------------------------------------------------------------------
//Descripcion : obtiene el listado de pasos
//Por         : VSR, 04/12/2011
function dibujarTablaPasos(idWorkflow, elemHolderTablaPasos){
  var queryString = "";
  var holderTablasPasos = document.getElementById(elemHolderTablaPasos);
  var themeBaseUrl = obtenerThemeBaseUrl();

  //construye queryString
  queryString += "page=Workflow.HttpAjax";
  queryString += "&op=ObtenerTablaPasos";
  queryString += "&idWorkflow="+ idWorkflow;
  queryString += "&themeBaseUrl="+ Url.encode(themeBaseUrl);

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (respuesta == CONST_CODIGO_SQL_ERROR) {
      mostrarMensaje(
        {
          nombreContenedor: elemHolderTablaPasos,
          tipo: "Error",
          mensaje: "Ha ocurrido un error interno y no se pudo obtener los pasos",
          mostrarBotonCerrar: false,
          cerrarAutomatico: false
        }
      )
    }
    else {
      holderTablasPasos.innerHTML = respuesta;
    }
  }
  var errFunc = function(t) {
    mostrarMensaje(
      {
        nombreContenedor: elemHolderTablaPasos,
        tipo: "Error",
        mensaje: "Ha ocurrido un error interno y no se pudo obtener los pasos",
        mostrarBotonCerrar: false,
        cerrarAutomatico: false
      }
    )
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
}

//--------------------------------------------------------------------------------------------
//Descripcion : obtiene el listado de contactos
//Por         : VSR, 04/05/2012
function dibujarTablaContactoEmpresa(idEmpresa){
  var queryString = "";
  var elemHolderTablaContactos = "hTablaContactos"
  var hTablaContactos = document.getElementById(elemHolderTablaContactos);
  var themeBaseUrl = obtenerThemeBaseUrl();

  //construye queryString
  queryString += "page=Workflow.HttpAjax";
  queryString += "&op=ObtenerTablaContactoEmpresa";
  queryString += "&idEmpresa="+ idEmpresa;
  queryString += "&themeBaseUrl="+ Url.encode(themeBaseUrl);

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (respuesta == CONST_CODIGO_SQL_ERROR) {
      mostrarMensaje(
        {
          nombreContenedor: elemHolderTablaContactos,
          tipo: "Error",
          mensaje: "Ha ocurrido un error interno y no se pudo obtener los contactos",
          mostrarBotonCerrar: false,
          cerrarAutomatico: false
        }
      )
    }
    else {
      hTablaContactos.innerHTML = respuesta;
    }
  }
  var errFunc = function(t) {
    mostrarMensaje(
      {
        nombreContenedor: elemHolderTablaContactos,
        tipo: "Error",
        mensaje: "Ha ocurrido un error interno y no se pudo obtener los contactos",
        mostrarBotonCerrar: false,
        cerrarAutomatico: false
      }
    )
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
}

//--------------------------------------------------------------------------------------------
//Descripcion : obtiene el listado de workflow
//Por         : VSR, 09/05/2012
function dibujarTablaWorkflowEmpresa(idEmpresa){
  var queryString = "";
  var elemHolderTablaDatos = "hTablaWorkflow"
  var hTablaDatos = document.getElementById(elemHolderTablaDatos);
  var themeBaseUrl = obtenerThemeBaseUrl();

  //construye queryString
  queryString += "page=Workflow.HttpAjax";
  queryString += "&op=ObtenerTablaWorkflowEmpresa";
  queryString += "&idEmpresa="+ idEmpresa;
  queryString += "&themeBaseUrl="+ Url.encode(themeBaseUrl);

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (respuesta == CONST_CODIGO_SQL_ERROR) {
      mostrarMensaje(
        {
          nombreContenedor: elemHolderTablaDatos,
          tipo: "Error",
          mensaje: "Ha ocurrido un error interno y no se pudo obtener los workflow",
          mostrarBotonCerrar: false,
          cerrarAutomatico: false
        }
      )
    }
    else {
      hTablaDatos.innerHTML = respuesta;
    }
  }
  var errFunc = function(t) {
    mostrarMensaje(
      {
        nombreContenedor: elemHolderTablaDatos,
        tipo: "Error",
        mensaje: "Ha ocurrido un error interno y no se pudo obtener los workflow",
        mostrarBotonCerrar: false,
        cerrarAutomatico: false
      }
    )
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
}


//--------------------------------------------------------------------------------------------
//Descripcion : limpia los controles de la creacion del paso
//Por         : VSR, 04/12/2011
function limpiarControlesPaso() {
  var lstHija = document.getElementById(prefijoControl + "msAprobadores_lstHija");
  var txtNombrePaso = document.getElementById(prefijoControl + "txtNombrePaso");
  var txtIdsHija = document.getElementById(prefijoControl + "msAprobadores_txtIdsHija");
  var txtValorPlazo = document.getElementById(prefijoControl + "txtValorPlazo");
  var ddlUnidadMedida = document.getElementById(prefijoControl + "ddlUnidadMedida_ddlCombo");
  var txtValorSemaforoAmarillo = document.getElementById(prefijoControl + "txtValorSemaforoAmarillo");
  var ddlUnidadMedidaSemaforoAmarillo = document.getElementById(prefijoControl + "ddlUnidadMedidaSemaforoAmarillo_ddlCombo");
  var txtUsuariosJSON = document.getElementById("txtUsuariosJSON");
  var txtIndiceFilaEditar = document.getElementById(prefijoControl + "txtIndiceFilaEditar");
  var lnkCancelarEditar = document.getElementById("lnkCancelarEditar");
  var btnCrearPaso = document.getElementById(prefijoControl + "btnCrearPaso");
  var hBotonCrearPaso = document.getElementById(prefijoControl + "hBotonCrearPaso");
  var data = txtUsuariosJSON.value;

  lstHija.innerHTML = "";
  formatearEstiloNormal(txtNombrePaso, "", true, false, "", "");
  formatearEstiloNormal(txtIdsHija, "", true, false, "", "");
  formatearEstiloNormal(txtValorPlazo, "", true, false, "", "");
  formatearEstiloNormal(ddlUnidadMedida, "", true, false, CONST_COMBO_VACIO, "");
  formatearEstiloNormal(txtValorSemaforoAmarillo, "", true, false, "", "");
  formatearEstiloNormal(ddlUnidadMedidaSemaforoAmarillo, "", true, false, CONST_COMBO_VACIO, "");
  formatearEstiloNormal(txtIndiceFilaEditar, "", true, false, "", "");
  lnkCancelarEditar.style.display = "none";
  btnCrearPaso.innerHTML = "+ Crear Paso";
  hBotonCrearPaso.className = "boton-azul-normal";

  cargarOpcionesComboDesdeJSON(
    {
      nombreCombo : prefijoControl + "msAprobadores_lstPadre",
      cabeceraCombo : "",
      json : data
    }
  )
}

//--------------------------------------------------------------------------------------------
//Descripcion : limpia los controles de la creacion del paso
//Por         : JBC, 08/12/2011
function seleccionarEmpresa(opciones){
  jQuery.fancybox({
    type: "iframe",
    autoDimensions : true,
    width : 380,
    height : 300,
    modal: !opciones.mostrarBotonCerrar,
    href: "index.php?page=Workflow.ListSeleccionarEmpresa"
  });
}

//--------------------------------------------------------------------------------------------
//Descripcion : Selecciona empresa activa
//Por         : JBC, 08/12/2011
function seleccionarEmpresaActiva(id){
  var queryString = "";

  //construye queryString
  queryString += "page=Workflow.HttpAjax";
  queryString += "&op=SeleccionarEmpresaActiva";
  queryString += "&idEmpresa=" + id;

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (respuesta == CONST_CODIGO_SQL_EXITO) {
      parent.jQuery.fancybox.close();
      parent.location.href = "index.php?page=Workflow.Home";
    }
    else {
      alert("Ha ocurrido un error interno y no se pudo seleccionar empresa");
    }
  }
  var errFunc = function(t) {
    alert("Ha ocurrido un error interno y no se pudo seleccionar empresa");
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
}

//--------------------------------------------------------------------------------------------
//Descripcion : calcula el monto neto de la factura
//Por         : VSR, 12/12/2011
function calcularMontoBruto() {
  var txtMontoNeto = document.getElementById(prefijoControl + "txtMontoNeto");
  var txtIVA = document.getElementById(prefijoControl + "txtIVA");
  var chkExentoIVA = document.getElementById(prefijoControl + "chkExentoIVA");
  var lblMontoBruto = document.getElementById(prefijoControl + "lblMontoBruto");
  var montoNeto = 0;
  var iva = 0;
  var montoBruto = 0;

  if(IsValid_Empty(txtMontoNeto)){
    lblMontoBruto.innerHTML = "<span><b>$</b></span>";
  } else {
    if(!IsValid_Money(txtMontoNeto)){
      lblMontoBruto.innerHTML = "<span><b>$</b></span>";
    } else {
      if (!chkExentoIVA.checked) {
        if(IsValid_Money(txtIVA)){
          iva = txtIVA.value.replace(",",".");    
        }
      }
      
      montoNeto = txtMontoNeto.value.replace(",",".");
      montoBruto = (montoNeto * (iva / 100)) + (montoNeto*1);
      montoBruto = new oNumero(montoBruto);
      montoBruto = montoBruto.formato(0, true);
      lblMontoBruto.innerHTML = "<span><b>$"+ montoBruto +"</b></span>";
    }
  }
}

//--------------------------------------------------------------------------------------------
//Descripcion : muestra u oculta la factura
//Por         : VSR, 21/12/2011
function verFactura(){
  var pnlImagen = document.getElementById(prefijoControl + "pnlHolderImagen");

  if(pnlImagen){
    var altoHolderImagen = "300";
    jQuery("#" + prefijoControl + "pnlImagen").attr("style", "position: fixed; bottom:-"+ altoHolderImagen +"px; width:100%; left:0px; z-index:200;");
    jQuery("#" + prefijoControl + "pnlHolderImagen").attr("style", "overflow:scroll; position:relative; width:100%; height:"+ altoHolderImagen +"px");
    jQuery("#hTituloVerImagen").toggleImagenBottom({
      nameHolderImagen: prefijoControl + "pnlImagen",
      nameHolderEspacioBlanco: "hEspacioBlanco",
      nameHolderTituloVerImagen: "hTituloVerImagen",
      heightHolderImagen: altoHolderImagen,
      themeBaseUrl: obtenerThemeBaseUrl()
    });
  }

}

//--------------------------------------------------------------------------------------------
//Descripcion : muestra el historial del flujo
//Por         : VSR, 27/12/2011
function verHistorialFlujo(id){
  jQuery.fancybox({
    width: "100%",
    height: "100%",
    modal: false,
    type: "iframe",
    href: "index.php?page=Workflow.ListHistorialFlujo&id=" + id
  });
}

//--------------------------------------------------------------------------------------------
//Descripcion : imprime la factura
//Por         : VSR, 28/12/2011
function imprimirFactura(id){
  jQuery.fancybox({
    width: "100%",
    height: "100%",
    modal: false,
    type: "iframe",
    href: "index.php?page=Workflow.ViewImprimirFactura&id=" + id
  });

  return false;
}

//--------------------------------------------------------------------------------------------
//Descripcion : imprime la orden de trabajo
//Por         : VSR, 02/05/2012
function imprimirOrdenTrabajo(id){
  jQuery.fancybox({
    width: "100%",
    height: "100%",
    modal: false,
    type: "iframe",
    href: "index.php?page=Workflow.ViewImprimirOrdenTrabajo&id=" + id
  });

  return false;
}

//--------------------------------------------------------------------------------------------
//Descripcion : imprime la solicitud credito
//Por         : VSR, 17/05/2012
function imprimirSolicitudCredito(id){
  jQuery.fancybox({
    width: "100%",
    height: "100%",
    modal: false,
    type: "iframe",
    href: "index.php?page=Workflow.ViewImprimirSolicitudCredito&id=" + id
  });

  return false;
}

//--------------------------------------------------------------------------------------------
//Descripcion : ejecuta la impresion
//Por         : VSR, 28/12/2011
function ejecutarImprimir(holderLinkImprimir) {
  ocultarElemento(holderLinkImprimir);
  window.print();
  mostrarElemento(holderLinkImprimir);
  //parent.jQuery.fancybox.close();
}

//--------------------------------------------------------------------------------------------
//Descripcion : edita un paso
//Por         : VSR, 12/01/2012
function editarFilaPaso(indicePaso){
  var txtNombrePaso = document.getElementById(prefijoControl + "txtNombrePaso");
  var txtNombrePasoFila = document.getElementById("txtNombrePaso_" + indicePaso);
  var txtValorPlazo = document.getElementById(prefijoControl + "txtValorPlazo");
  var txtValorPlazoFila = document.getElementById("txtValorPlazo_" + indicePaso);
  var ddlUnidadMedida = document.getElementById(prefijoControl + "ddlUnidadMedida_ddlCombo");
  var txtUnidadMedidaFila = document.getElementById("txtUnidadMedida_" + indicePaso);
  var txtValorSemaforoAmarillo = document.getElementById(prefijoControl + "txtValorSemaforoAmarillo");
  var txtValorSemaforoAmarilloFila = document.getElementById("txtValorSemaforoAmarillo_" + indicePaso);
  var ddlUnidadMedidaSemaforoAmarillo = document.getElementById(prefijoControl + "ddlUnidadMedidaSemaforoAmarillo_ddlCombo");
  var txtUnidadMedidaSemaforoAmarilloFila = document.getElementById("txtUnidadMedidaSemaforoAmarillo_" + indicePaso);
  var txtAprobadores = document.getElementById("txtAprobadores_" + indicePaso);
  var txtUsuariosJSON = document.getElementById("txtUsuariosJSON");
  var txtIdsHija = document.getElementById(prefijoControl + "msAprobadores_txtIdsHija");
  var lstPadre = document.getElementById(prefijoControl + "msAprobadores_lstPadre");
  var lstHija = document.getElementById(prefijoControl + "msAprobadores_lstHija");
  var txtIndiceFilaEditar = document.getElementById(prefijoControl + "txtIndiceFilaEditar");
  var lnkCancelarEditar = document.getElementById("lnkCancelarEditar");
  var btnCrearPaso = document.getElementById(prefijoControl + "btnCrearPaso");
  var hBotonCrearPaso = document.getElementById(prefijoControl + "hBotonCrearPaso");
  var data = jQuery.parseJSON(txtUsuariosJSON.value);
  var listadoAprobadores = "";
  var nombreControlLista = "";

  //copia valores
  txtNombrePaso.value = Url.decode(txtNombrePasoFila.value);
  txtValorPlazo.value = Url.decode(txtValorPlazoFila.value);
  ddlUnidadMedida.value = Url.decode(txtUnidadMedidaFila.value);
  txtValorSemaforoAmarillo.value = Url.decode(txtValorSemaforoAmarilloFila.value);
  ddlUnidadMedidaSemaforoAmarillo.value = Url.decode(txtUnidadMedidaSemaforoAmarilloFila.value);
  listadoAprobadores = Url.decode(txtAprobadores.value);
  txtIdsHija.value = listadoAprobadores;
  lstPadre.innerHTML = "";
  lstHija.innerHTML = "";
  txtIndiceFilaEditar.value = indicePaso;
  lnkCancelarEditar.style.display = "inline";
  btnCrearPaso.innerHTML = "Actualizar Paso";
  hBotonCrearPaso.className = "boton-verde-mediano";

  //formatea la lista para hacer la busqueda
  listadoAprobadores = ","+ listadoAprobadores +",";
  if(data) {
    jQuery.each(data, function() {
      if(InStr(listadoAprobadores, "," + this.Valor + ",") > 0) {
        nombreControlLista = "#"+ prefijoControl +"msAprobadores_lstHija";
      } else {
        nombreControlLista = "#"+ prefijoControl +"msAprobadores_lstPadre";
      }
      jQuery(nombreControlLista).append(jQuery("<option></option>").attr("value", this.Valor).text(this.Texto));
    });
  }

  //se mueve el scroll para editar el paso
  jQuery.scrollTo('#hEncargados',800);
}

//--------------------------------------------------------------------------------------------
//Descripcion : actualiza los valores del contacto en la fila seleccionada
//Por         : VSR, 04/05/2012
function editarFilaContactoEmpresa(indice) {
  alert("En construcccion: fila " + indice);
}


//--------------------------------------------------------------------------------------------
//Descripcion : actualiza los valores del paso en la fila seleccionada
//Por         : VSR, 12/01/2012
function actualizarPasoTabla(indicePaso){
  var txtNombrePaso = document.getElementById(prefijoControl + "txtNombrePaso");
  var txtNombrePasoFila = document.getElementById("txtNombrePaso_" + indicePaso);
  var lblNombrePasoFila = document.getElementById("lblNombrePaso_" + indicePaso);
  var txtAprobadoresFila = document.getElementById("txtAprobadores_" + indicePaso);
  var lblAprobadoresFila = document.getElementById("lblAprobadores_" + indicePaso);
  var txtIdsHija = document.getElementById(prefijoControl + "msAprobadores_txtIdsHija");
  var txtValorPlazo = document.getElementById(prefijoControl + "txtValorPlazo");
  var txtValorPlazoFila = document.getElementById("txtValorPlazo_" + indicePaso);
  var ddlUnidadMedida = document.getElementById(prefijoControl + "ddlUnidadMedida_ddlCombo");
  var txtUnidadMedidaFila = document.getElementById("txtUnidadMedida_" + indicePaso);
  var txtValorSemaforoAmarillo = document.getElementById(prefijoControl + "txtValorSemaforoAmarillo");
  var txtValorSemaforoAmarilloFila = document.getElementById("txtValorSemaforoAmarillo_" + indicePaso);
  var ddlUnidadMedidaSemaforoAmarillo = document.getElementById(prefijoControl + "ddlUnidadMedidaSemaforoAmarillo_ddlCombo");
  var txtUnidadMedidaSemaforoAmarilloFila = document.getElementById("txtUnidadMedidaSemaforoAmarillo_" + indicePaso);
  var lblPlazoFila  = document.getElementById("lblPlazo_" + indicePaso);
  var lblSemaforoAmarilloFila  = document.getElementById("lblSemaforoAmarillo_" + indicePaso);
  var nombreUnidadMedida = jQuery("#" + prefijoControl + "ddlUnidadMedida_ddlCombo option:selected").text();
  var nombreUnidadMedidaSemaforoAmarillo = jQuery("#" + prefijoControl + "ddlUnidadMedidaSemaforoAmarillo_ddlCombo option:selected").text();
  var lblPaso = document.getElementById("lblPaso_" + indicePaso);
  var txtOrdenPaso = document.getElementById("txtOrdenPaso_" + indicePaso);
  var listaAprobadores = "";

  //obtiene nombre de los aprobadores
  jQuery("#" + prefijoControl + "msAprobadores_lstHija option").each(function(){
    listaAprobadores += jQuery(this).text() + "<br/>";
  });

  txtNombrePasoFila.value = Url.encode(txtNombrePaso.value);
  lblNombrePasoFila.innerHTML = txtNombrePaso.value;

  txtAprobadoresFila.value = Url.encode(txtIdsHija.value);
  lblAprobadoresFila.innerHTML = listaAprobadores;

  txtValorPlazoFila.value = Url.encode(txtValorPlazo.value);
  txtUnidadMedidaFila.value = Url.encode(ddlUnidadMedida.value);
  lblPlazoFila.innerHTML = txtValorPlazo.value +"&nbsp;"+ nombreUnidadMedida;

  txtValorSemaforoAmarilloFila.value = Url.encode(txtValorSemaforoAmarillo.value);
  txtUnidadMedidaSemaforoAmarilloFila.value = Url.encode(ddlUnidadMedidaSemaforoAmarillo.value);
  lblSemaforoAmarilloFila.innerHTML = "A los: "+ txtValorSemaforoAmarillo.value +"&nbsp;"+ nombreUnidadMedidaSemaforoAmarillo;

  lblPaso.innerHTML = txtOrdenPaso.value + "<br/><span style='font-size:11px;'>(actualizar)</span>";
  lblPaso.className = "cssLabelPasoActualizado";

  limpiarControlesPaso();
}

//--------------------------------------------------------------------------------------------
//Descripcion : valida el formulario del wucAprobacion
//Por         : VSR, 12/01/2012
function validarFormularioWucAprobacion(idFlujo,idHistorial,elTxtObservacion,elPnlMensaje,elPnlFormulario,estado) {
  var msgError = "";
  var txtObservacion = document.getElementById(elTxtObservacion);
  var pnlMensaje = document.getElementById(elPnlMensaje);
  var pnlFormulario = document.getElementById(elPnlFormulario);
  var puedeAprobar = validarPuedeAprobarWucAprobacion(idFlujo,idHistorial);

  if (puedeAprobar == "1") {
    if(IsValid_Empty(txtObservacion)){
      msgError += " - Debe ingresar una Observación\n";
      formatearEstiloConError(txtObservacion, "");
    } else {
      if (!IsValid_CaracteresPermitidos(txtObservacion)) {
        msgError += " - La Observación contiene caracteres no permitidos: "+ CARACTERES_NO_VALIDOS_SIN_SEPARADOR +"\n";
        formatearEstiloConError(txtObservacion, "");
      } else {
        formatearEstiloNormal(txtObservacion, "", false, false, "", "");
      }
    }

    //si hay errores entonces muestra mensaje
    if(msgError != ""){
      alert("Se encontraron los siguientes errores:\n" + msgError);
      return false;
    } else {
      if (estado == "Rechazar" || estado == "Cancelar") {
        return confirm("Si selecciona este estado el flujo terminará y no se podrá volver a aprobar\n¿Desea continuar?");
      } else {
        return true;
      }
    }
  } else {
    pnlMensaje.style.display = "block";
    pnlFormulario.style.display = "none";
    return false;
  }

}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario de busqueda
//Por        : VSR, 27/11/2011
function validarFormularioBusquedaHomePorAprobar(){
  validationEngineClearCountCustomError();
  var txtFiltroNombreFlujo = document.getElementById(prefijoControl +"txtFiltroNombreFlujoDgPorAprobar");
  var txtFiltroRegistrosPorPagina = document.getElementById(prefijoControl +"txtFiltroRegistrosPorPaginaDgPorAprobar");

  //valida Nombre Flujo
  if(!IsValid_Empty(txtFiltroNombreFlujo)){
    if(!IsValid_CaracteresPermitidos(txtFiltroNombreFlujo)){
      jQuery.validationEngine.addPromptError(prefijoControl +"txtFiltroNombreFlujoDgPorAprobar", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
    }
    else{
      jQuery.validationEngine.removePrompt(prefijoControl +"txtFiltroNombreFlujoDgPorAprobar");
    }
  }
  else{
    jQuery.validationEngine.removePrompt(prefijoControl +"txtFiltroNombreFlujoDgPorAprobar");
  }

  //valida Registros Por Pagina
  if(!IsValid_Empty(txtFiltroRegistrosPorPagina)){
    if(!IsValid_NumberInt(txtFiltroRegistrosPorPagina)){
      jQuery.validationEngine.addPromptError(prefijoControl +"txtFiltroRegistrosPorPaginaDgPorAprobar", "* S&oacute;lo n&uacute;meros");
    }
    else{
      jQuery.validationEngine.removePrompt(prefijoControl +"txtFiltroRegistrosPorPaginaDgPorAprobar");
    }
  }
  else{
    jQuery.validationEngine.removePrompt(prefijoControl +"txtFiltroRegistrosPorPaginaDgPorAprobar");
  }

  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario de busqueda
//Por        : VSR, 27/11/2011
function validarFormularioBusquedaHomeActivos(){
  validationEngineClearCountCustomError();
  var txtFiltroNombreFlujo = document.getElementById(prefijoControl +"txtFiltroNombreFlujoDgActivos");
  var txtFiltroRegistrosPorPagina = document.getElementById(prefijoControl +"txtFiltroRegistrosPorPaginaDgActivos");
  var txtFiltroFechaDesde = document.getElementById(prefijoControl + "txtFiltroFechaInicioDgActivos");
  var txtFiltroFechaHasta = document.getElementById(prefijoControl + "txtFiltroFechaTerminoDgActivos");

  //valida Nombre Flujo
  if(!IsValid_Empty(txtFiltroNombreFlujo)){
    if(!IsValid_CaracteresPermitidos(txtFiltroNombreFlujo)){
      jQuery.validationEngine.addPromptError(prefijoControl +"txtFiltroNombreFlujoDgActivos", "* Contiene caracteres no permitidos: " + CARACTERES_NO_VALIDOS_SIN_SEPARADOR);
    }
    else{
      jQuery.validationEngine.removePrompt(prefijoControl +"txtFiltroNombreFlujoDgActivos");
    }
  }
  else{
    jQuery.validationEngine.removePrompt(prefijoControl +"txtFiltroNombreFlujoDgActivos");
  }

  //valida FECHA DESDE
  if(!IsValid_Empty(txtFiltroFechaDesde)){
    if(!IsValid_Date(txtFiltroFechaDesde)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFiltroFechaInicioDgActivos", "* Fecha inv&aacute;lida");
    }
    else {
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaInicioDgActivos");
    }
  } else {
    jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaInicioDgActivos");
  }

  //valida FECHA HASTA
  if(!IsValid_Empty(txtFiltroFechaHasta)){
    if(!IsValid_Date(txtFiltroFechaHasta)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFiltroFechaTerminoDgActivos", "* Fecha inv&aacute;lida");
    }
    else {
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaTerminoDgActivos");
    }
  } else {
    jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaTerminoDgActivos");
  }

  //valida que la fecha de termino no sea menor que la de inicio
  if(!IsValid_Empty(txtFiltroFechaDesde) && !IsValid_Empty(txtFiltroFechaHasta) && IsValid_Date(txtFiltroFechaDesde) && IsValid_Date(txtFiltroFechaHasta)){
    //construye objetos fechas para compararlos
    var newFechaDesde  = getDate(txtFiltroFechaDesde.value, "00:00");
    var newFechaHasta = getDate(txtFiltroFechaHasta.value, "00:00");

    //compara las fechas, si hay error muestra mensaje sino envia formulario
    if(newFechaDesde > newFechaHasta){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFiltroFechaInicioDgActivos", "* No puede ser mayor que fecha de t&eacute;rmino");
    }
    else{
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaInicioDgActivos");
    }
  }

  //valida Registros Por Pagina
  if(!IsValid_Empty(txtFiltroRegistrosPorPagina)){
    if(!IsValid_NumberInt(txtFiltroRegistrosPorPagina)){
      jQuery.validationEngine.addPromptError(prefijoControl +"txtFiltroRegistrosPorPaginaDgActivos", "* S&oacute;lo n&uacute;meros");
    }
    else{
      jQuery.validationEngine.removePrompt(prefijoControl +"txtFiltroRegistrosPorPaginaDgActivos");
    }
  }
  else{
    jQuery.validationEngine.removePrompt(prefijoControl +"txtFiltroRegistrosPorPaginaDgActivos");
  }

  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario de busqueda
//Por        : VSR, 24/05/2012
function validarFormularioBuscador(){
  validationEngineClearCountCustomError();
  var txtFiltroFechaDesde = document.getElementById(prefijoControl + "txtFiltroFechaDesde");
  var txtFiltroFechaHasta = document.getElementById(prefijoControl + "txtFiltroFechaHasta");

  //valida FECHA DESDE
  if(!IsValid_Empty(txtFiltroFechaDesde)){
    if(!IsValid_Date(txtFiltroFechaDesde)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFiltroFechaDesde", "* Fecha inv&aacute;lida");
    }
    else {
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaDesde");
    }
  } else {
    jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaDesde");
  }

  //valida FECHA HASTA
  if(!IsValid_Empty(txtFiltroFechaHasta)){
    if(!IsValid_Date(txtFiltroFechaHasta)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFiltroFechaHasta", "* Fecha inv&aacute;lida");
    }
    else {
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaHasta");
    }
  } else {
    jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaHasta");
  }

  //valida que la fecha de termino no sea menor que la de inicio
  if(!IsValid_Empty(txtFiltroFechaDesde) && !IsValid_Empty(txtFiltroFechaHasta) && IsValid_Date(txtFiltroFechaDesde) && IsValid_Date(txtFiltroFechaHasta)){
    //construye objetos fechas para compararlos
    var newFechaDesde  = getDate(txtFiltroFechaDesde.value, "00:00");
    var newFechaHasta = getDate(txtFiltroFechaHasta.value, "00:00");

    //compara las fechas, si hay error muestra mensaje sino envia formulario
    if(newFechaDesde > newFechaHasta){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtFiltroFechaDesde", "* No puede ser mayor que fecha de t&eacute;rmino");
    }
    else{
      jQuery.validationEngine.removePrompt(prefijoControl + "txtFiltroFechaDesde");
    }
  }

  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//--------------------------------------------------------------------------------------------
//Descripcion : valida si puede aprobar si es que no se ha aprobado antes
//Por         : VSR, 03/02/2012
function validarPuedeAprobarWucAprobacion(idFlujo,idHistorial) {
  var queryString = "";
  var puedeValidar = "1";

  //construye queryString
  queryString += "page=Workflow.HttpAjax";
  queryString += "&op=ValidarPuedeAprobar";
  queryString += "&idFlujo="+ idFlujo;
  queryString += "&idHistorial="+ idHistorial;

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (respuesta == CONST_CODIGO_SQL_ERROR) {
      alert("Ha ocurrido un error interno y no se pudo validar si puede aprobar");
    }
    else {
      puedeValidar = respuesta;
    }
  }
  var errFunc = function(t) {
    alert("Ha ocurrido un error interno y no se pudo validar si puede aprobar");
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
  return puedeValidar;
}

//--------------------------------------------------------------------------------------------
//Descripcion : valida los datos de la solicitud credito
//Por         : JB, 08/05/2012
function validarFormularioSolicitudCredito(){
  validationEngineClearCountCustomError();
  var txtRut = document.getElementById(prefijoControl + "txtRut");
  var txtDv = document.getElementById(prefijoControl + "txtDv");
  var fuArchivo1 = document.getElementById(prefijoControl + "fuArchivo1");
  var fuArchivo2 = document.getElementById(prefijoControl + "fuArchivo2");
  var txtReplicarDatos = document.getElementById(prefijoControl + "txtReplicarDatos");

  if(IsValid_Empty(txtRut)){
    jQuery.validationEngine.addPromptError(prefijoControl + "txtRut", "* Este campo es requerido");
  } else {
    if(!IsValid_Rut(txtRut, txtDv)){
      jQuery.validationEngine.addPromptError(prefijoControl + "txtRut", "* Rut no v&aacute;lido");
    } else{
      jQuery.validationEngine.removePrompt(prefijoControl + "txtRut");
    }
  }

  if(fuArchivo1 || fuArchivo2){
    //si no esta replicando los datos, entonces pide este campo como obligatorio
    if(txtReplicarDatos.value == "0"){
      if(IsValid_Empty(fuArchivo1) && IsValid_Empty(fuArchivo2)){
        jQuery.validationEngine.addPromptError(prefijoControl + "fuArchivo1", "* Este campo es requerido");
      } else {
          jQuery.validationEngine.removePrompt(prefijoControl + "fuArchivo1");
      }
    }
  }
  
  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    var textoModal = generarTextoHtmlModal("Procesando, espere un momento por favor...");
    jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
  }
  return retorno;
}

//--------------------------------------------------------------------------------------------
//Descripcion : calcula el valor cuota del credito
//Por         : JB, 08/05/2012
function calcularValorCuotaSolicitudCredito(){
  var txtMonto = document.getElementById(prefijoControl + "txtMonto");
  var txtTasa = document.getElementById(prefijoControl + "txtTasa");
  var txtPlazoEnMeses = document.getElementById(prefijoControl + "txtPlazoEnMeses");
  var txtValorCuota = document.getElementById(prefijoControl + "txtValorCuota");
  var monto = 0;
  var tasa = 0;
  var plazoMeses = 0;
  var valorCuota = 0;

  if(IsValid_Empty(txtMonto) || IsValid_Empty(txtTasa) || IsValid_Empty(txtPlazoEnMeses)){
    txtValorCuota.value = "";
  } else {
    monto = (IsValid_Empty(txtMonto) || !IsValid_Money(txtMonto)) ? 0 : txtMonto.value.replace(",",".");
    tasa = (IsValid_Empty(txtTasa) || !IsValid_Money(txtTasa)) ? 0 : txtTasa.value.replace(",",".");
    plazoMeses = (IsValid_Empty(txtPlazoEnMeses) || !IsValid_Money(txtPlazoEnMeses)) ? 0 : txtPlazoEnMeses.value.replace(",",".");

    if(plazoMeses != 0) {
      valorCuota = ((monto * (tasa / 100)) + (monto * 1))/ plazoMeses;
      valorCuota = new oNumero(valorCuota);
      valorCuota = valorCuota.formato(1, false);
    }

    txtValorCuota.value = (valorCuota == 0) ? "" : valorCuota;
  }
}

//--------------------------------------------------------------------------------------------
//Descripcion : transforma los plazos en minutos
//Por         : VSR, 26/03/2012
function transformarPlazoMinutos(valor, unidadMedida) {
  switch (unidadMedida) {
    case "Minute":
        valor = valor * 1;
      break;
    case "Hour":
        valor = valor * 60;
      break;
    case "Day":
        valor = valor * 1440;
      break;
    default:
      valor = valor * 1;
      break;
  }  
  return valor;
}


//--------------------------------------------------------------------------------------------
//Descripcion : calcula el plazo total a partir del valor de los plazos
//Por         : VSR, 26/03/2012
function calcularPlazoTotalWorkflow(opciones) {
  var txtValorPlazo = document.getElementsByName("txtValorPlazo[]");
  var txtUnidadMedida = document.getElementsByName("txtUnidadMedida[]");
  var txtTotalPlazoAprobacion = document.getElementById(prefijoControl + "txtTotalPlazoAprobacion");
  var txtTotalPlazoAprobacionActual = document.getElementById(prefijoControl + "txtTotalPlazoAprobacionActual");
  var txtUnidadTotalPlazoAprobacion = document.getElementById(prefijoControl + "txtUnidadTotalPlazoAprobacion");
  var lblUnidadTotalPlazoAprobacion = document.getElementById(prefijoControl + "lblUnidadTotalPlazoAprobacion");

  var valorTotal = 0;
  var valorFinal = 0;
  var unidadMedidaMayor = "";
  var unidadMedidaMayorLabel = "";

  for (var i = 0; i <= txtValorPlazo.length - 1; i++) {
    var oValorPlazo = txtValorPlazo[i];
    var oUnidadMedida = txtUnidadMedida[i];
    var valorPlazo = oValorPlazo.value;
    var unidadMedida = oUnidadMedida.value;

    valorTotal += transformarPlazoMinutos(valorPlazo, unidadMedida);

    if (unidadMedidaMayor != "Day") {
      if (unidadMedida == "Day"){
        unidadMedidaMayor = "Day";
      } else {
        if (unidadMedidaMayor != "Hour") {
          if (unidadMedida == "Hour"){
            unidadMedidaMayor = "Hour";
          } else {
            unidadMedidaMayor = "Minute";
          }
        }
      }
    }
  }

  if (unidadMedidaMayor == "Day") {
    valorFinal = parseInt(valorTotal / 1440);
    valorFinal = ((valorTotal % 1440) != 0) ? valorFinal + 1 : valorFinal;
    unidadMedidaMayorLabel = "D&iacute;as";
  } else if (unidadMedidaMayor == "Hour") {
    valorFinal = parseInt(valorTotal / 60);
    valorFinal = ((valorTotal % 60) != 0) ? valorFinal + 1 : valorFinal;
    unidadMedidaMayorLabel = "Horas";
  } else {
    valorFinal = valorTotal;
    unidadMedidaMayorLabel = "Minutos";
  }

  if (opciones.recalcular) {txtTotalPlazoAprobacion.value = valorFinal;}
  txtTotalPlazoAprobacionActual.value = valorFinal;
  txtUnidadTotalPlazoAprobacion.value = unidadMedidaMayor;
  lblUnidadTotalPlazoAprobacion.innerHTML = unidadMedidaMayorLabel;
}


//--------------------------------------------------------------------------------------------
//Descripcion : comprueba si el valor ya existe en base de datos
//Por         : VSR, 01/01/2011
function comprobarDuplicidadFactura(pagina,idFlujo,idEmpresa, idWorkflow) {
  var txtNumero = document.getElementById(prefijoControl + "txtNumero");
  var txtIdProveedor = document.getElementById(prefijoControl + "txtIdProveedor");
  var txtExisteNumero = document.getElementById(prefijoControl + "txtExisteNumero");
  var divExisteNumero = document.getElementById(prefijoControl + "divExisteNumero");
  var queryString = "";
  var data = null;
  var themeBaseUrl = obtenerThemeBaseUrl();

  if(!IsValid_Empty(txtNumero)) {
    //construye queryString
    queryString += "page=Workflow.HttpAjax";
    queryString += "&op=ValidarDuplicidadFactura";
    queryString += "&idFlujo=" + idFlujo;
    queryString += "&idEmpresa=" + idEmpresa;
    queryString += "&idWorkflow=" + idWorkflow ;
    queryString += "&idProveedor=" + txtIdProveedor.value;
    queryString += "&valor=" + Url.encode(txtNumero.value);

    var okFunc = function(t) {
      var respuesta = jQuery.trim(t);
      if (respuesta == CONST_CODIGO_SQL_ERROR) {
        divExisteNumero.innerHTML = "&nbsp;<span class='ico16-error'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeError'>Ha ocurrido un error interno y no se pudo obtener el valor.</span>";
        txtExisteNumero.value = "0";
      }
      else {
        //si el valor esta duplicado entonces muestra mensaje de Ocupado
        var data = jQuery.parseJSON(respuesta);
        if(data){
          data = data[0];
          if(data.Existe == "1") {
            divExisteNumero.innerHTML = "&nbsp;<span class='ico16-error'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeError'>No disponible</span>";
          } else {
            divExisteNumero.innerHTML = "&nbsp;<span class='ico16-ticket'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeExito'>Disponible</span>";
          }
          txtExisteNumero.value = data.Existe;
          mostrarMensajeReplicarDatosFlujo(respuesta, "holderMensajeReplicarDatos",pagina);
        } else {
          divExisteNumero.innerHTML = "&nbsp;<span class='ico16-error'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeError'>No disponible</span>";
          txtExisteNumero.value = "1";
        }
      }
    }
    var errFunc = function(t) {
      divExisteNumero.innerHTML = "&nbsp;<span class='ico16-error'><img src='"+ themeBaseUrl +"/img/_blank.gif' class='ico16' alt='' /></span>&nbsp;<span class='cssMensajeError'>Ha ocurrido un error interno y no se pudo obtener el valor.</span>";
      txtExisteNumero.value = "0";
    }
    jQuery.ajax({
      url: "index.php",
      type: "post",
      async: false,
      data: queryString,
      success: okFunc,
      error: errFunc
    });
  } else {
    divExisteNumero.innerHTML = "";
    txtExisteNumero.value = "0";
  }

}

//--------------------------------------------------------------------------------------------
//Descripcion : comprueba si el valor ya existe en base de datos
//Por         : VSR, 01/01/2011
function comprobarDuplicidadProveedor() {
  var txtIdProveedor = document.getElementById(prefijoControl + "txtIdProveedor");
  var txtRutProveedor = document.getElementById(prefijoControl + "txtRutProveedor");
  var txtRazonSocial = document.getElementById(prefijoControl + "txtRazonSocial");
  var txtIdEmpresa = document.getElementById(prefijoControl + "txtIdEmpresa");
  var queryString = "";
  var retorno = "";

  //construye queryString
  queryString += "page=Workflow.HttpAjax";
  queryString += "&op=ValidarDuplicidadProveedor";
  queryString += "&idEmpresa=" + Url.encode(txtIdEmpresa.value);
  queryString += "&idProveedor=" + Url.encode(txtIdProveedor.value);
  queryString += "&rutProveedor=" + Url.encode(txtRutProveedor.value);
  queryString += "&razonSocial=" + Url.encode(txtRazonSocial.value);

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (respuesta == CONST_CODIGO_SQL_ERROR) {
      alert("Ha ocurrido un error interno y no se pudo obtener la validación de duplicidad de proveedor");
    }
    else {
      retorno = respuesta;
    }
  }
  var errFunc = function(t) {
    alert("Ha ocurrido un error interno y no se pudo obtener la validación de duplicidad de proveedor");
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });

  return retorno;
}


//--------------------------------------------------------------------------------------------
//Descripcion : muestra mensaje para replicar los datos de un flujo
//Por         : VSR, 03/04/2012
function mostrarMensajeReplicarDatosFlujo(estructuraJSON, elemHolderMensaje,pagina) {
  var oHolderMensaje = document.getElementById(elemHolderMensaje);
  var data = jQuery.parseJSON(estructuraJSON);
  var themeBaseUrl = obtenerThemeBaseUrl();
  var template = "";

  template += "<div class=\"clearBoth cssReplicarDatosContenedor\">";
  template += "  <div class=\"clearBoth cssReplicarDatosFondo\">";
  template += "    <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">";
  template += "      <tr valign=\"top\">";
  template += "        <td>";
  template += "        <div id=\"wf_LinkReplicarDatos\" style=\"text-align:center; display:none\" class=\"cssReplicarDatosTextoNegritaChico\">[&nbsp;<a href=\"javascript:;\" onclick=\"validarReplicarDatosFlujo('{PAGINA}','{QUERY_STRING}',true)\" class=\"cssReplicarDatosTextoNegritaChico\">Replicar Datos</a>&nbsp;]</div>";
  template += "        <div id=\"wf_MensajeReplica\">";
  template += "          <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">";
  template += "            <tr valign=\"top\">";
  template += "              <td class=\"cssReplicarDatosTextoNormal\">";
  template += "                <div class=\"cssReplicarDatosTextoNegrita\">Este flujo ya existe en el sistema, pero puede utilizarlo para crear otro con los mismos datos.</div>";
  template += "                <div style=\"padding-top:5px;\">La informaci&oacute;n de su &uacute;ltimo estado es el siguiente:</div>";
  template += "                <div style=\"padding-top:3px;\">";
  template += "                  <table border=\"0\" cellpadding=\"2\" cellspacing=\"0\">";
  template += "                    <tr valign=\"top\">";
  template += "                      <td class=\"cssReplicarDatosLabel\">Estado</td>";
  template += "                      <td class=\"cssReplicarDatosTextoNormal\">: {ESTADO}</td>";
  template += "                    </tr>";
  template += "                    <tr valign=\"top\">";
  template += "                      <td class=\"cssReplicarDatosLabel\">Fecha</td>";
  template += "                      <td class=\"cssReplicarDatosTextoNormal\">: {FECHA}</td>";
  template += "                    </tr>";
  template += "                    <tr valign=\"top\">";
  template += "                      <td class=\"cssReplicarDatosLabel\">Observaci&oacute;n</td>";
  template += "                      <td class=\"cssReplicarDatosTextoNormal\">{OBSERVACION}</td>";
  template += "                    </tr>";
  template += "                  </table>";
  template += "                </div>";
  template += "              </td>";
  template += "              <td class=\"cssReplicarDatosContenedorBoton\">";
  template += "                <div><div class=\"boton-verde-mediano\"><a href=\"javascript:;\" class=\"boton-texto-blanco\" onclick=\"validarReplicarDatosFlujo('{PAGINA}','{QUERY_STRING}',true)\">Replicar Datos</a></div></div>";
  template += "              </td>";
  template += "            </tr>";
  template += "          </table>";
  template += "        </div>";
  template += "        </td>";
  template += "        <td style=\"width:13px\">";
  template += "          <div id=\"wf_LinkCerrar\"><a href=\"javascript:;\" onclick=\"expandirContraerMensajeReplicarDatos('wf_LinkReplicarDatos','wf_MensajeReplica','wf_LinkCerrar','contraer')\"><span class=\"ico16-cerrar-amarillo\"><img src=\""+ themeBaseUrl +"/img/_blank.gif\" class=\"ico16Cerrar cursorPointer\" alt=\"\" /></span></a></div>";
  template += "        </td>";
  template += "      </tr>";
  template += "  </div>";
  template += "</div>";

  if(data){
    data = data[0];
    if(data.IdFlujoEstado == ESTADO_FLUJO_PENDIENTE || data.IdFlujoEstado == ESTADO_FLUJO_APROBADO || data.IdFlujoEstado == "-1") {
      oHolderMensaje.innerHTML = "";
      oHolderMensaje.style.display = "none";
    } else {
      //reemplaza las marcas especiales
      template = template.replace("{ESTADO}",UCase(data.NombreFlujoEstado));
      template = template.replace("{FECHA}",data.Fecha);
      template = template.replace("{OBSERVACION}",data.Observacion);
      template = template.replace(/{PAGINA}/g,pagina);
      template = template.replace(/{QUERY_STRING}/g,data.QueryString);

      oHolderMensaje.innerHTML = template;
      oHolderMensaje.style.display = "block";
      abrirPopUpReplicarDatos(estructuraJSON,pagina);
    }
  }

}

//--------------------------------------------------------------------------------------------
//Descripcion : cambia los mensajes del bloque de replica
//Por         : VSR, 03/04/2012
function expandirContraerMensajeReplicarDatos(elemLinkReplicarDatos,elemMensajeReplica,elemLinkCerrar,opcion){
  var objLinkCerrar = document.getElementById(elemLinkCerrar);
  var themeBaseUrl = obtenerThemeBaseUrl();

  if(opcion == "contraer") {
    jQuery("#" + elemMensajeReplica).slideUp(500, function () {
      jQuery("#" + elemLinkReplicarDatos).fadeIn(500);
      objLinkCerrar.innerHTML = "<a href=\"javascript:;\" onclick=\"expandirContraerMensajeReplicarDatos('"+ elemLinkReplicarDatos +"','"+ elemMensajeReplica +"','"+ elemLinkCerrar +"','expandir')\"><span class=\"ico16-abrir-amarillo\"><img src=\""+ themeBaseUrl +"/img/_blank.gif\" class=\"ico16Cerrar cursorPointer\" alt=\"\" /></span></a>"
    });
  } else {
    jQuery("#" + elemLinkReplicarDatos).fadeOut(500, function () {
      jQuery("#" + elemMensajeReplica).slideDown(500);
      objLinkCerrar.innerHTML = "<a href=\"javascript:;\" onclick=\"expandirContraerMensajeReplicarDatos('"+ elemLinkReplicarDatos +"','"+ elemMensajeReplica +"','"+ elemLinkCerrar +"','contraer')\"><span class=\"ico16-cerrar-amarillo\"><img src=\""+ themeBaseUrl +"/img/_blank.gif\" class=\"ico16Cerrar cursorPointer\" alt=\"\" /></span></a>"
    });
  }
}

//--------------------------------------------------------------------------------------------
//Descripcion : redirecciona el flujo para crear uno nuevo con los mismos datos
//Por         : VSR, 03/04/2012
function validarReplicarDatosFlujo(pagina,queryString, mostrarConfirmacion){
  var redireccionar = true;
  if(mostrarConfirmacion){
    redireccionar = confirm("¿Está seguro de replicar los datos?");
  }

  if(redireccionar){
    top.location.href = "index.php?page="+ pagina +"&a="+ queryString;
  }
  return false;
}

//--------------------------------------------------------------------------------------------
//Descripcion : envia los datos para replicarlos
//Por         : VSR, 11/04/2012
function replicarDatosPopUp(pagina, queryString){
  parent.validarReplicarDatosFlujo(pagina,queryString,false);
  parent.jQuery.fancybox.close();
}

//--------------------------------------------------------------------------------------------
//Descripcion : envia los datos para replicarlos
//Por         : VSR, 30/04/2012
function cargarDatosProveedor(json){
  var txtIdProveedor = document.getElementById(prefijoControl + "txtIdProveedor");
  var txtRazonSocial = document.getElementById(prefijoControl + "txtRazonSocial");
  var txtNombreFantasia = document.getElementById(prefijoControl + "txtNombreFantasia");
  var txtGiro = document.getElementById(prefijoControl + "txtGiro");
  var txtDireccion = document.getElementById(prefijoControl + "txtDireccion");
  var txtComuna = document.getElementById(prefijoControl + "txtComuna");
  var txtCiudad = document.getElementById(prefijoControl + "txtCiudad");
  var txtPais = document.getElementById(prefijoControl + "txtPais");
  var item = json.item;

  formatearEstiloNormal(txtIdProveedor, "", false, true, item.idProveedor, "");
  formatearEstiloNormal(txtRazonSocial, "", false, true, item.razonSocial, "");
  formatearEstiloNormal(txtNombreFantasia, "", false, true, item.nombreFantasia, "");
  formatearEstiloNormal(txtGiro, "", false, true, item.giro, "");
  formatearEstiloNormal(txtDireccion, "", false, true, item.direccion, "");
  formatearEstiloNormal(txtComuna, "", false, true, item.comuna, "");
  formatearEstiloNormal(txtCiudad, "", false, true, item.ciudad, "");
  formatearEstiloNormal(txtPais, "", false, true, item.pais, "");

  //coloca el foco en el campo del numero
  setTimeout("jQuery('#"+ prefijoControl +"txtNumero').focus()",100);
}

//--------------------------------------------------------------------------------------------
//Descripcion : limpia los datos del proveedor
//Por         : VSR, 30/04/2012
function limpiarDatosProveedor(){
  var txtIdProveedor = document.getElementById(prefijoControl + "txtIdProveedor");
  var txtRazonSocial = document.getElementById(prefijoControl + "txtRazonSocial");
  var txtNombreFantasia = document.getElementById(prefijoControl + "txtNombreFantasia");
  var txtGiro = document.getElementById(prefijoControl + "txtGiro");
  var txtDireccion = document.getElementById(prefijoControl + "txtDireccion");
  var txtComuna = document.getElementById(prefijoControl + "txtComuna");
  var txtCiudad = document.getElementById(prefijoControl + "txtCiudad");
  var txtPais = document.getElementById(prefijoControl + "txtPais");

  formatearEstiloNormal(txtIdProveedor, "", false, false, "0", "");
  formatearEstiloNormal(txtRazonSocial, "", true, false, "", "");
  formatearEstiloNormal(txtNombreFantasia, "", true, false, "", "");
  formatearEstiloNormal(txtGiro, "", true, false, "", "");
  formatearEstiloNormal(txtDireccion, "", true, false, "", "");
  formatearEstiloNormal(txtComuna, "", true, false, "", "");
  formatearEstiloNormal(txtCiudad, "", true, false, "", "");
  formatearEstiloNormal(txtPais, "", true, false, "", "");
}

//--------------------------------------------------------------------------------------------
//Descripcion : habilita o deshabilita el campo de IVA
//Por         : VSR, 01/05/2012
function habilitarIVA(){
  var chkExentoIVA = document.getElementById(prefijoControl + "chkExentoIVA");
  var txtIVA = document.getElementById(prefijoControl + "txtIVA");
  var limpiarControl = false;
  var readOnly = false;
  var valorDefecto = "19";

  if (chkExentoIVA.checked) {
    limpiarControl = true;
    readOnly = true;
    valorDefecto = "";
  }

  formatearEstiloNormal(txtIVA, "", limpiarControl, readOnly, valorDefecto, "");
}

//--------------------------------------------------------------------------------------------
//Descripcion : calcula la fecha de nacimiento
//Por         : VSR, 02/05/2012
function calcularFechaVencimiento(){
  var txtFechaEmision = document.getElementById(prefijoControl + "txtFechaEmision");
  var txtFechaVencimiento = document.getElementById(prefijoControl + "txtFechaVencimiento");
  var DIAS_ADICIONALES = 30;
  var fecha = new Date();
  var nuevaFecha = "";

  if(!IsValid_Empty(txtFechaEmision)){
    fecha = getDate(txtFechaEmision.value,"00:00");
    fecha = addDayDate(fecha, DIAS_ADICIONALES);
    nuevaFecha = formatearFechaDDMMAAAA(fecha);
  }
  txtFechaVencimiento.value = nuevaFecha;
}

//--------------------------------------------------------------------------------------------
//Descripcion : elimina la fila de la tabla contactos
//Por         : VSR, 04/05/2012
function eliminarFilaContactoEmpresa(indice, eliminadoDesde) {
  var queryString = "";
  var elemHolderTablaContactos = "hTablaContactos"
  var txtIdEmpresa = document.getElementById("txtIdEmpresa");

  //construye queryString
  var confirmar = confirm("¿Está seguro que desea eliminar el contacto?");

  if (eliminadoDesde == "PopUp") {
    return confirmar;
  } else {
    if(confirmar) {
      queryString += "page=Workflow.HttpAjax";
      queryString += "&op=EliminarContactoEmpresa";
      queryString += "&indiceContacto="+ indice;

      var okFunc = function(t) {
        var respuesta = jQuery.trim(t);
        if (respuesta == CONST_CODIGO_SQL_ERROR) {
          mostrarMensaje(
            {
              nombreContenedor: elemHolderTablaContactos,
              tipo: "Error",
              mensaje: "Ha ocurrido un error interno y no se pudo eliminar el contacto",
              mostrarBotonCerrar: false,
              cerrarAutomatico: false
            }
          )
        }
        else {
          dibujarTablaContactoEmpresa(txtIdEmpresa.value);
        }
      }
      var errFunc = function(t) {
        mostrarMensaje(
          {
            nombreContenedor: elemHolderTablaContactos,
            tipo: "Error",
            mensaje: "Ha ocurrido un error interno y no se pudo eliminar el contacto",
            mostrarBotonCerrar: false,
            cerrarAutomatico: false
          }
        )
      }
      jQuery.ajax({
        url: "index.php",
        type: "post",
        async: false,
        data: queryString,
        success: okFunc,
        error: errFunc
      });
    }
    return false;
  }
}

//--------------------------------------------------------------------------------------------
//Descripcion : elimina la fila de la tabla workflow
//Por         : VSR, 04/05/2012
function eliminarFilaWorkflow(indice, totalFlujos, eliminadoDesde) {
  var queryString = "";
  var elemHolderTablaContactos = "hTablaWorkflow"
  var txtIdEmpresa = document.getElementById("txtIdEmpresa");
  var msgEliminacion = "";

  if(totalFlujos == 0){
    msgEliminacion = "¿Está seguro que desea eliminar el workflow?";
  } else {
    msgEliminacion = "Tiene "+ ((totalFlujos == 1) ? "1 flujo asociado" : totalFlujos + " flujos asociados") +" y si lo elimina perderá toda la información\n¿Está seguro que desea eliminar el workflow?";
  }

  //construye queryString
  var confirmar = confirm(msgEliminacion);

  if (eliminadoDesde == "PopUp") {
    return confirmar;
  } else {
    if(confirmar) {
      queryString += "page=Workflow.HttpAjax";
      queryString += "&op=EliminarWorkflowSesion";
      queryString += "&indice="+ indice;

      var okFunc = function(t) {
        var respuesta = jQuery.trim(t);
        if (respuesta == CONST_CODIGO_SQL_ERROR) {
          mostrarMensaje(
            {
              nombreContenedor: elemHolderTablaContactos,
              tipo: "Error",
              mensaje: "Ha ocurrido un error interno y no se pudo eliminar el workflow",
              mostrarBotonCerrar: false,
              cerrarAutomatico: false
            }
          )
        }
        else {
          dibujarTablaWorkflowEmpresa(txtIdEmpresa.value);
        }
      }
      var errFunc = function(t) {
        mostrarMensaje(
          {
            nombreContenedor: elemHolderTablaContactos,
            tipo: "Error",
            mensaje: "Ha ocurrido un error interno y no se pudo eliminar el workflow",
            mostrarBotonCerrar: false,
            cerrarAutomatico: false
          }
        )
      }
      jQuery.ajax({
        url: "index.php",
        type: "post",
        async: false,
        data: queryString,
        success: okFunc,
        error: errFunc
      });
    }
    return false;
  }
}

//--------------------------------------------------------------------------------------------
//Descripcion : obtiene nombre de la plantilla a partir del combo
//Por         : VSR, 13/05/2012
function obtenerNombrePlantillaDesdeCombo(){
  var ddlPlantilla = document.getElementById("ddlPlantilla_ddlCombo");
  var txtNombrePlantilla = document.getElementById("txtNombrePlantilla");
  var nombrePlantilla = "";

  if(!IsValid_ComboVacio(ddlPlantilla)){
    nombrePlantilla = jQuery("#ddlPlantilla_ddlCombo option:selected").text();
  }
  txtNombrePlantilla.value = nombrePlantilla;
}

//--------------------------------------------------------------------------------------------
//Descripcion : verifica si puede mover los pasos
//Por         : VSR, 06/06/2012
function validaPuedeMoverPasos(elemCheck, puedeMoverPasos){
  var tblPasos = document.getElementById("tblPasos");
  var objCheck = document.getElementById(elemCheck);

  if(objCheck){
    puedeMoverPasos = (objCheck.checked) ? "1" : "0";
  }
  
  if(tblPasos){
    if(puedeMoverPasos == "1"){
      jQuery("#tblPasos tbody").sortable({
        disabled: false,
        opacity: 0.6,
        placeholder: "placeholder",
        start: function (e, ui) {
          ui.placeholder.html("Soltar aqu&iacute;...");
        },
        stop : function () {
          asignarOrdenPaso({cambiarLabelOrdenPaso: false});
        }
      });

      jQuery(".cursorNoMove").each(function(){
        jQuery(this).attr("class","cursorMove");
      });

    } else {
      jQuery("#tblPasos tbody").sortable({
        disabled: true
      });

      jQuery(".cursorMove").each(function(){
        jQuery(this).attr("class","cursorNoMove");
      });

    }
    
  }
}

//--------------------------------------------------------------------------------------------
//Descripcion : elimina la clase cuando el flujo se esta creando
//Por         : VSR, 17/06/2012
function removerClassColumnaWucAprobacion(){
  jQuery(".cssPanelWucAprobacion").removeClass("cssPanelWucAprobacion");
}